Codeigniter: функция instantiate_class () - PullRequest
1 голос
/ 05 октября 2011

Когда я прочитал источник Codeigniter, я обнаружил функцию, расположенную в файле: system / codeigniter / comm.php, вот так:

/**
* Instantiate Class
*
* Returns a new class object by reference, used by load_class() and the DB class.
* Required to retain PHP 4 compatibility and also not make PHP 5.3 cry.
*
* Use: $obj =& instantiate_class(new Foo());
*/
function &instantiate_class(&$class_object)
{
    return $class_object;
}

Я не могу понять это хорошо, и мне нужно больше деталей о совместимости. Спасибо.

обновление: версия Codeigniter 1.7.2

1 Ответ

4 голосов
/ 05 октября 2011

Функция и ее пример использования являются полностью поддельными:

$obj =& instantiate_class(new Foo());

Это то же самое, что и запись:

$obj =& new Foo();

Какой способ должен был быть выполнен в PHP4.

Начиная с PHP 5, вы можете просто написать:

$obj = new Foo();

, как вы, возможно, знаете.

На самом деле, как и вы, я не вижу никакого использованияфункционировать только с единственной целью, что это излишне.Это могло иметь некоторую потребность в прошлом (когда у него было какое-то другое определение).Я могу только предположить о его существовании, скорее всего, у разработчика были проблемы с пониманием ссылок / псевдонимов в PHP , который обычно не совсем понятен.

Редактировать: КакKingCrunch указал, что эта функция необходима, если вы хотите склеить PHP 4 с кодом PHP 5.3, потому что это предотвратит предупреждения строгих стандартов в PHP 5.3.Таким образом, вместо PHP 4 (потенциально необходимого)

$obj =& new Foo();

Это должно быть записано как

$obj =& instantiate_class(new Foo());

, которое скрывает предупреждение "Назначение возвращаемого значения нового по ссылке устарело"и позволяет кодировать в стиле PHP 4 для среды PHP 5.3.

Надеюсь, это поможет вам с вашей программной археологией .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...