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

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

Другие вопросы по тегам