Итак, мне просто интересно кое-что теоретическое, что также практически полезно. Этот вопрос также является непосредственным продолжением это ТАК вопрос.
Для псевдопеременной «$ this» в PHP в руководстве есть следующее:
[слова выделены жирным шрифтом для акцента].$ это ссылка к вызывающему объекту (обычно объекту к
которому принадлежит метод, но возможно другой объект
Так что мой вопрос в основном мульти-партер:
Что руководство подразумевает под ссылкой здесь? Это говорит о том, что когда я использую псевдопеременную $ this (например, в примере кода ниже), я передаю переменную типа ‘object’ в myFunction? Или я передаю ссылку на PHP или «истинную ссылку» на myFunction?
class FooFighter{
__construct(){
$this->myFunction($this);
}
function myFunction($foo){
gettype($foo);
}
}
Я попытался найти ответ на # 2, используя следующий код, но я получаю ошибку:
class FooFighter{
__construct(){
echo '$this type: ' . gettype($this);
}
}
Исправляемая фатальная ошибка: объект класса AppInstance не может быть
преобразован в строку в
файл на линии 44
Это говорит мне о том, что переменная, которая должна быть передана в myFunction, на самом деле является объектом, но я ожидаю получить то же поведение, если я передам «истинную ссылку» в myFunction, так как «истинная ссылка» (C ++ Style Reference) может использоваться вместо фактического объекта.
Итак, является ли $ this в PHP ссылкой на стиль C ++ («истинная ссылка») или реальным объектом? Я просто немного смущен документацией.
Обратите внимание на следующее:
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 не будет сообщать о переменной в качестве ссылки. Он только сообщает о типе того, на что указывает ссылка.
Других решений пока нет …