Согласно действующим стандартам кодирования, допустимо ли добавлять ссылку на имя функции в определении функции?

я использую 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?

-1

Решение

Вы можете использовать справочный оператор (&) в объявлении функции для возврата ссылки из функции (т. е. вместо «значения»). В этом случае вы также должны использовать оператор ссылки, когда присваиваете возвращаемое значение переменной в вызывающем коде (т.е. вне функции).

Смотрите пример № 3 в следующей ссылке, а также описание перед ним:

http://php.net/manual/en/functions.returning-values.php

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]