【发布时间】:2011-04-26 21:00:51
【问题描述】:
更新:在
上面写着:
PHP5 OOP 的关键点之一是 经常提到的是“物 默认情况下通过引用传递”。 这并不完全正确。
这是为什么呢?以下是我不知道是否完全正确的原因:
我认为松散地说,foo 可以说是一个对象,或者类 Foo 的一个实例。
但是从技术上讲,foo 是否只是一个引用,在 Java 和 Ruby 中的方式完全相同,其中变量 foo 始终只是对一个对象的引用。
这就是为什么在 PHP 中,
function add($obj) {
$obj->a++;
}
我们不是说“通过引用传递”,而是从技术上讲,我们是在传递一个值,也就是一个引用。因此,它是“通过 引用”,而不是“通过 引用”。
但是,如果我们在 PHP 中说 foo 是一个对象,那么我想“通过引用传递”是有道理的。这是真的吗? foo 据说是对对象的引用,而不是对象,所以这就是为什么我们只是“按值传递”?
【问题讨论】:
-
该页面上说明这一想法的第一段代码在 Java 或 Ruby 中是相同的行为,但我们仍将其称为 Java 或 Ruby 中的“对对象的引用”,不是吗?
-
相关文章有误。它说 PHP 引用不是引用,因为它们可以分配为指向另一个对象。引用是引用,一种表示指向对象的指针的构造。根据语言规范,您可以或不能更改参考。 C++ 引用不能更改。可以更改 Java、Ruby 和 PHP 引用。
-
@Vincent 虽然我知道fallacies of authority arguments,但应该注意Sara Golemon 是PHP 核心和PECL 贡献者,并且写过a book about writing PHP extensions,所以我倾向于相信她知道她在写什么。但请随时与她讨论。她博客中的 cmets 是开放的。
-
我不怀疑她对 PHP 的了解,因为每个 PHP 代码示例都是真实的,并且(简单地)解释了行为。我不同意一些句子的措辞,例如
Notice now, that $b is still that original object. Had it been an actual reference with $a, it would have changed to a simple string as well.这是错误的,并且基于与 C++ 相关的引用概念。 Java 引用例如像 PHP 一样工作并且是引用...
标签: php pass-by-reference pass-by-value object-reference php-internals