$ Это ссылка в PHP?

Итак, мне просто интересно кое-что теоретическое, что также практически полезно. Этот вопрос также является непосредственным продолжением это ТАК вопрос.

Для псевдопеременной «$ this» в PHP в руководстве есть следующее:

$ это ссылка к вызывающему объекту (обычно объекту к
которому принадлежит метод, но возможно другой объект

[слова выделены жирным шрифтом для акцента].

Так что мой вопрос в основном мульти-партер:

  1. $ Это на самом деле реализовано как ссылка ((НЕ ссылка на PHP,
    но истинная ссылка указатель — как в C ++) «истинная ссылка») в PHP?
  2. Что руководство подразумевает под ссылкой здесь? Это говорит о том, что когда я использую псевдопеременную $ this (например, в примере кода ниже), я передаю переменную типа ‘object’ в myFunction? Или я передаю ссылку на PHP или «истинную ссылку» на myFunction?

    class FooFighter{
    __construct(){
    $this->myFunction($this);
    }
    
    function myFunction($foo){
    gettype($foo);
    }
    }
    
  3. Я попытался найти ответ на # 2, используя следующий код, но я получаю ошибку:

        class FooFighter{
    __construct(){
    echo '$this type: ' . gettype($this);
    }
    }
    

Исправляемая фатальная ошибка: объект класса AppInstance не может быть
преобразован в строку в
файл на линии 44

Это говорит мне о том, что переменная, которая должна быть передана в myFunction, на самом деле является объектом, но я ожидаю получить то же поведение, если я передам «истинную ссылку» в myFunction, так как «истинная ссылка» (C ++ Style Reference) может использоваться вместо фактического объекта.

Итак, является ли $ this в PHP ссылкой на стиль C ++ («истинная ссылка») или реальным объектом? Я просто немного смущен документацией.

1

Решение

Обратите внимание на следующее:

php > $x = new StdClass();
php > $y = &$x;
php > echo gettype($x);
object
php > echo gettype($y);
object
php > class foo { function __construct() { echo gettype($this); } }
php > $z = new foo();
object
php > $a = 42;
php > $b = &$a;
php > echo gettype($b);
integer

Обратите внимание, что ни в коем случае PHP не будет сообщать о переменной в качестве ссылки. Он только сообщает о типе того, на что указывает ссылка.

3

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

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

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