Я искал много страниц результатов Google, а также здесь, в stackoverflow, но не могу найти решение, которое, похоже, соответствует моей ситуации. Кажется, у меня есть одна последняя загвоздка в функции, которую я пытаюсь построить, которая использует call_user_func_array для динамического создания объектов.
Увлекательная фатальная ошибка, которую я получаю, составляет Object of class Product could not be converted to string
. Когда ошибка возникает, в журнале я получаю пять из них (по одному для каждого аргумента): PHP Warning: Missing argument 1 for Product::__construct(),
перед опасной фатальной ошибкой.
Это код функции:
public static function SelectAll($class, $table, $sort_field, $sort_order = "ASC")
{
/* First, the function performs a MySQL query using the provided arguments. */
$query = "SELECT * FROM " .$table. " ORDER BY " .$sort_field. " " .$sort_order;
$result = mysql_query($query);
/* Next, the function dynamically gathers the appropriate number and names of properties. */
$num_fields = mysql_num_fields($result);
for($i=0; $i < ($num_fields); $i++)
{
$fetch = mysql_fetch_field($result, $i);
$properties[$i] = $fetch->name;
}
/* Finally, the function produces and returns an array of constructed objects.*/
while($row = mysql_fetch_assoc($result))
{
for($i=0; $i < ($num_fields); $i++)
{
$args[$i] = $row[$properties[$i]];
}
$array[] = call_user_func_array (new $class, $args);
}
return $array;
}
Теперь, если я прокомментирую строку call_user_func_array и заменим ее на это:
$array[] = new $class($args[0],$args[1],$args[2],$args[3],$args[4]);
Страница загружается так, как должна, и заполняет таблицу, которую я создаю. Итак, все абсолютно функционально, пока я не попытаюсь использовать мой массив $args
в call_user_func_array
.
Есть ли какие-то тонкие подробности о том, что я вызываю этот массив? Я читал руководство по PHP для call_user_func_array один раз, а затем некоторые, и примеры на этой странице, казалось, показывали людям просто создание массива и вызов его для второго аргумента. Что я могу делать неправильно?