我正在学习PHP,OOP并且我学到了很多东西,但有些东西可以取笑我,
我创建了一个用于说明对象创建的图像:Link
如果有人能回答几个问题,请...
第一步:我定义了对象变量......
第二步:创建对象并将内存位置放入我们想要的变量中......
第三步:使用我们的参考创建新的全局变量。
当我调用一个Object(变量)时,是什么意思:
第一步:我们将转到我们的变量创建的内存位置......
第二步:变量值(引用)将我们引用到对象所在的内存位置......
第三步:我们可以访问该对象的方法和属性。
如果有人能帮助我理解这些事情,我会很高兴,谢谢大家,祝你们度过愉快的一天。
答案 0 :(得分:3)
PHP不会返回内存引用,而是返回类的实例。通常,您不知道在内存中创建和存储对象的位置。如果您仍然需要使用PHP中的内存位置和引用,那么Stack Overflow已经有了很好的答案:How check memory location of variable in php?。关于在PHP中使用OOP,您应该查看php.net上的Classes and Objects手册。
关于回显对象:
如果要回显对象,则需要定义__toString()
magic method,指定对象应如何表示为字符串。在你的情况下,这将是
<?php
class x {
public function num() {
return 5;
}
public function __toString() {
return $this->num();
}
}
$ob = new x();
echo $ob; // outputs 5
在PHP中,$ob
不是对内存位置的引用,而是对您的类的实例。因此,您也可以在不定义echo $ob->num();
方法的情况下致电__toString()
。
答案 1 :(得分:1)
要获得对象的字符串表示,您必须实现函数__toString()
关于内部机制 - 它比你想象的要复杂得多。由于PHP是一种动态语言 - 它为每个类对象保留了大量信息。不仅是字符串变量所需的内存,还包括函数映射,内存管理结构,类型结构,默认值。 如果您想深入了解read this
答案 2 :(得分:1)
所有PHP变量都存储为“zval”。
有关zval的更多信息:http://docstore.mik.ua/orelly/webprog/php/ch14_06.htm
转储zval的内部信息的函数:http://php.net/manual/en/function.debug-zval-dump.php
答案 3 :(得分:1)
当您尝试回显对象时,必须覆盖类中的__toString()魔术函数。我真的建议你阅读这篇文章http://net.tutsplus.com/tutorials/php/object-oriented-php-for-beginners/。它几乎可以回答你的问题。
答案 4 :(得分:1)
我不是PHP程序员,但也许我可以帮助你至少减少你的困惑。
同样,我不确定php(因为它是解释语言)实际上如何处理对象创建,但它应该非常接近C ++的方式。在一天结束时,在同一个硬件上运行。
因此,您知道您的类是编译器(解释器)的“模板”。但是你需要了解实际上是什么对象。对象实际上就像一个信息表。它包含您的类的变量。它不包含方法。
因此,当您使用new
运算符创建对象时,此“表”将在内存中创建并填充值。该表有其基地址。这是分配给对象变量。
重要的是,object不包含actuall方法。这些是在内存的其他地方创建的当你调用一些对象方法时,你实际上调用了“常规”函数,编译器将对象的(那个表)地址作为参数传递给它。
这非常简化。但我认为它应该可以帮助你成像,计算机实际上在后台做了什么。