я использую PHP 7.1.11
В руководстве по PHP я сталкиваюсь с совершенно другим кодом, как показано ниже:
<?php
function &get_instance_ref() {
static $obj;
echo 'Static object: ';
var_dump($obj);
if (!isset($obj)) {
// Assign a reference to the static variable
$obj = &new stdclass;
}
$obj->property++;
return $obj;
}
function &get_instance_noref() {
static $obj;
echo 'Static object: ';
var_dump($obj);
if (!isset($obj)) {
// Assign the object to the static variable
$obj = new stdclass;
}
$obj->property++;
return $obj;
}
$obj1 = get_instance_ref();
$still_obj1 = get_instance_ref();
echo "\n";
$obj2 = get_instance_noref();
$still_obj2 = get_instance_noref();
?>
Вывод приведенного выше кода выглядит следующим образом:
Static object: NULL
Static object: NULL
Static object: NULL
Static object: object(stdClass)(1) {
["property"]=>
int(1)
}
Я совсем не понимал приведенный выше код, потому что впервые в своей карьере я увидел, что в определении функции добавлена ссылка на имя функции. Итак, с самой первой строки код дает мне тяжелые времена в моей жизни.
Кто-нибудь, пожалуйста, объясните мне, что здесь происходит в приведенном выше коде?
Какова цель использования ссылки в определении функции? Разве этот стиль кодирования не усложняет простые вещи?
Это действительный стиль кодирования в соответствии с доступным в настоящее время Стандарты кодирования PHP?
Вы можете использовать справочный оператор (&) в объявлении функции для возврата ссылки из функции (т. е. вместо «значения»). В этом случае вы также должны использовать оператор ссылки, когда присваиваете возвращаемое значение переменной в вызывающем коде (т.е. вне функции).
Смотрите пример № 3 в следующей ссылке, а также описание перед ним:
Других решений пока нет …