【发布时间】:2016-06-04 02:29:27
【问题描述】:
所以,我只是对一些实用的理论知识感到好奇。这个问题也是对this SO question.的直接跟进
对于PHP中的伪变量“$this”,手册中有这样的说法:
$this 是对调用对象(通常是要调用的对象)的 reference 该方法属于哪个,但可能是另一个对象
[粗体字表示强调]。
所以我的问题基本上是多方的:
- $this 实际上是作为引用实现的吗((不是 PHP 引用, 而是真正的指针式引用——如 C++ 中的“真正的引用”)在 PHP 中?
-
这里的参考手册是什么意思?是不是说当我使用伪变量 $this(例如在下面的代码示例中)时,我将一个“对象”类型的变量传递给 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 的变量实际上是一个对象,但如果我将“真实引用”作为“真实引用”(C++ 风格)传递给 myFunction,我希望得到相同的行为Reference) 可以用来代替实际的对象。
那么,PHP 中的 $this 是 C++ 样式引用(“真实引用”)还是实际对象?我只是对文档有点困惑。
【问题讨论】:
-
我怀疑你的致命错误是因为你没有在
echo "$this type: ...中转义$,所以解释器试图将对象转换为字符串以进行输出。至于是否是内存指针(a la C),没有:php.net/manual/en/language.references.whatare.php -
也许你可以试试 get_class($this);这将有助于回答您的问题
-
改用
echo '$this type' . gettype(..),或echo "\$this etc...。将$this放入"引用的字符串会强制php 尝试对该对象进行字符串化,并且它没有__toString() 魔术方法。 -
@CD001 哇,完全错过了,谢谢。 -马丁。谢谢。所以,它肯定告诉我 $this 是类 FooFighter 的对象。但不幸的是,它并没有完全回答我问题的核心,因为我相当确定“真实引用”会返回相同的值,因为“真实引用”会指向内存地址。 (感谢您的信息)
-
参见docs.php.net/manual/en/language.oop5.references.php,“引用”的意思是“允许对象访问者找到实际对象的对象标识符”。
标签: php reference this pseudo-element