powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / (PHP5) вопрос, про передачу параметров функции, реально ли такое?
8 сообщений из 8, страница 1 из 1
(PHP5) вопрос, про передачу параметров функции, реально ли такое?
    #38286159
однобитный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здрасте! Сегодня вопрос у меня не стандартный...
Можно ли каким либо образом передавать разные параметры функции?

Грубо говоря, чтобы создать любой класс, с любыми параметрами, например, что-то вроде

go123("page", "\"123\"");
go123("item", "$par = \"123\", $arr = array()");

function go123($class_name, $str = "")
{

$class = new $class_name(eval($str));

return $class;

}

допустимо ли такое? есть ли другое лучшее решение?
...
Рейтинг: 0 / 0
(PHP5) вопрос, про передачу параметров функции, реально ли такое?
    #38286166
Фотография Ренат
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
(PHP5) вопрос, про передачу параметров функции, реально ли такое?
    #38286171
Фотография r u
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
однобитный,

можно то можно, только зачем?
если на вход конструктора будет приходить ВСЕ ЧТО УГОДНО, тогда придется внутри него и разгребать входные параметры, определять что пришло и что с этим делать. в итоге контруктор будет огромным, с кучей условий, ветвлений и т.д.

опишите РЕАЛЬНУЮ задачу, где вам нужно такое поведение в классе. иначе сложно предположить что именно вы хотите получить.
...
Рейтинг: 0 / 0
(PHP5) вопрос, про передачу параметров функции, реально ли такое?
    #38286181
однобитный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
у меня есть класс для создания коллекции, я им создаю классы, для постраничного вывода

Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
class GenericObjectCollection extends BaseModel
{

private $table_name;
private $primary_key;
private $contentMetaOnly;
private $class_name;
private $items_per_page;
private $item_count = 0;
private $id_array;
private $obj_array;

public function __construct($table_name, $primary_key, $class_name, $contentMetaOnly = array())
{

	parent::__construct();
	$this->table_name = $table_name;
	$this->primary_key = $primary_key;
	$this->class_name = $class_name;
	$this->contentMetaOnly = $contentMetaOnly;

}

...

}



например, выводим товары на определенной странице ("передаем на вид": список товаров, номер текущей страницы, номера страниц)

Код: php
1.
2.
3.
$this->view->assign_by_ref("items", $items->GetItems($page_pos));
$this->view->assign("page_cur_pos", $page_pos);
$this->view->assign("page_count_pos", $items->GetPageCount());



тут $items->GetItems($page_pos), использует класс GenericObjectCollection, для создания коллекции товаров "item"

т.е.

Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
public function GetItems($id_category = -1, $page_num = 1, $sort = "title")
{

  $objArray = array();

	$dbc = new GenericObjectCollection(DB_TABLE_PREFIX . "item", "id_item", "item", array("id_item", "id_category", "title", "article", "price", "sklad", "flag_new", "flag_hit"));

	$sql = "...";
	
	$result = $this->db->getRows($sql);

	for($i=0; $i<sizeof($result);$i++)
	{

		$dbc->AddTuple($result[$i]["id_item"]);

	}

	$dbc->SetPageSize($this->items_per_page);

	$dbc->PopulateObjectArray($page_num);

	$objArray = $dbc->RetrievePopulatedObjects($page_num);

	$this->item_count = $dbc->GetItemCount();
	$this->page_count = $dbc->GetNumPages();

	return $objArray;

}



все бы хорошо, но если я захочу создать не класс "item", а "itemadvanced", которому в конструктор надо передать еще дополнительные параметры... поэтому хочу расширить класс коллекций

Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
class GenericObjectCollection extends BaseModel
{

private $table_name;
private $primary_key;
private $contentMetaOnly;
private $class_name;
private $items_per_page;
private $item_count = 0;
private $id_array;
private $obj_array;

public function __construct($table_name, $primary_key, $class_name, $contentMetaOnly = array()[color=red], $add_pars = ""[/color])
{

	parent::__construct();
	$this->table_name = $table_name;
	$this->primary_key = $primary_key;
	$this->class_name = $class_name;
	$this->contentMetaOnly = $contentMetaOnly;
        [color=red]$this->add_pars = $add_pars;[/color]

}

...

}



т.е. при создании класса, должны в конструктор класса передаваться эти "произвольные параметры", т.е.

Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
public function PopulateObjectArray($page_num = 0)
{
...
			$result_rows = $this->db->getRows($sql);

			for ($i=0; $i<=sizeof($result_rows)-1; $i++)
			{

                                $this_row = $result_rows[$i];
				$this_db_row_id = $this_row[$this->primary_key];
				$this_index = $this->_GetIndexFromTupleID($this_db_row_id);

				if ($this_index >= 0)
				{

                                 // вот так было раньше, т.е. тут я хочу передать эти дополнительные произвольные параметры     
                                 // $this->obj_array[$this_index] = new $this->class_name($this_row);
                                 [color=red]$this->obj_array[$this_index] = new $this->class_name($this_row, eval($this->add_pars));[/color]
										
				};

...
	
}



вообщем как бы так
...
Рейтинг: 0 / 0
(PHP5) вопрос, про передачу параметров функции, реально ли такое?
    #38286193
Фотография r u
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
однобитный,

правильнее тогда
создать отдельные классы для "item" и "itemadvanced"
причем "itemadvanced" потомок от "item".
и в их конструкторах принимать все доп параметры, а в методах реализовать все отличительные особенности в поведении и в наличии данных.

мешать все в одном - плохое решение. класс раздуется, много лишних связей, чревато ошибками и сложно поддерживать. расширять далее еще сложнее.
...
Рейтинг: 0 / 0
(PHP5) вопрос, про передачу параметров функции, реально ли такое?
    #38286207
однобитный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
r uоднобитный,

правильнее тогда
создать отдельные классы для "item" и "itemadvanced"
причем "itemadvanced" потомок от "item".
и в их конструкторах принимать все доп параметры, а в методах реализовать все отличительные особенности в поведении и в наличии данных.

мешать все в одном - плохое решение. класс раздуется, много лишних связей, чревато ошибками и сложно поддерживать. расширять далее еще сложнее.
да у меня так и есть

Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
class Item extends PersistableItem
{

public function __construct($initdict)
{

	parent::__construct($initdict);

}

...

}



Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
class ItemAdvanced extends Item
{

public function __construct($initdict, $id_user)
{

	parent::__construct($initdict);
      
        $this->id_user = $id_user;

}

...

}



просто вот в чем суть... Как передать второй параметр в конструктор класса из функции PopulateObjectArray(), т.е. вот тут:

Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
public function PopulateObjectArray($page_num = 0)
{
...
                                 // вот так было раньше, т.е. тут я хочу передать эти дополнительные произвольные параметры     
                                 // $this->obj_array[$this_index] = new $this->class_name($this_row);

            $class = new ReflectionClass('ReflectionFunction');
            // вообщем надо что-то вроде этого, но чтобы newInstanceArgs передавала один обязательный параметр массив $this_row, а второй - массив произвольных параметров... вот я и не знаю как быть тут...
            $this->obj_array[$this_index] = $class->newInstanceArgs($this_row, $this->contentAdditional);
										
...
	
}
...
Рейтинг: 0 / 0
(PHP5) вопрос, про передачу параметров функции, реально ли такое?
    #38286228
однобитный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
странно, походу получилось

Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
          if(count($this->contentAdditional) > 0)
          {

            $class = new ReflectionClass($this->class_name);
            $this->obj_array[$this_index] = $class->newInstanceArgs(array($this_row, $this->contentAdditional));

          }
          else
          {
          
            $this->obj_array[$this_index] = new $this->class_name($this_row);
          
          }
...
Рейтинг: 0 / 0
(PHP5) вопрос, про передачу параметров функции, реально ли такое?
    #38286245
однобитный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
спасибо!!!
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / (PHP5) вопрос, про передачу параметров функции, реально ли такое?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]