2011-06-17 63 views
1

嗯,我在我的方便的PHP书中读到,能够区分参考和可变参数是非常重要的。该书说,当变量改变时,参数化变量的原始值将被保留,而当参考被改变时,参数化参考的原始值会改变。它说这是关键的区别,如果我正确阅读。函数通过引用或者通过变量来使用哪个函数?

嗯,我想知道什么时候每个比另一个更有用。如何知道何时使用变量以及何时使用引用创建自己的函数?

+1

其实对象是各地通过参考默认为传递5.3(尽管这不影响原语)。 –

+1

@Tomalak:更具体地说,通过对象标识符传递(和分配)对象,该对象标识符的行为与引用的行为稍有不同。例如,如果您通过为其指定字符串值“abc”来覆盖传递的对象,则会看到原始对象保持不变。 – webbiedave

+0

@webbiedave:当然,那。 –

回答

2

“参考文献”(变量别名)使您的代码难以理解,并且可能成为难以追踪错误的根源。在php中使用引用没有任何正当的理由,并且为了安全起见,尽量避免使用它们。

而且,php5中的对象与“引用”无关。

在php中实现的“参考”是一个奇怪的概念。通常,在编程语言中,变量彼此独立,因此更改一个变量不会影响其他变量。 Php“引用”允许多个变量共享相同的值并相互依赖。基本上,你改变了一个变量,而另一个你认为完全不相关的变量也正在发生变化。这不是件好事,经常会导致很多混乱。

php中的对象(我需要添加'五'吗?)与上述意义中的“引用”无关。它们的行为很像C指针(实际上,这就是它们的底层) - 当你将一个对象传递给一个函数时,你实际上传递了一个指针,函数可以使用这个指针来操纵对象内容,但是没有方法为函数更改传递的变量本身,例如,使其指向另一个对象。

这种“对象引用”的误解可能是因为人们混淆了generic CS term,这也适用于指针PHP的“引用”(符号语法),处理等

+0

我想你应该扩展你的陈述,“没有任何有效的理由在php中使用引用。” – webbiedave

+0

我同意....同时,我并不真正了解对象和引用如何关联。我认为引用被分配给函数,而不是对象....我真的很想听到更多,但我想很难通过虚空来解释....如果您可以扩展您的答案,我会非常感激。 –

+0

谢谢。由于C级解释,它变得更有意义。这是它在我的书中绘制的方式 - 对象是指针。我仍然不完全明白,但是我非常有信心在这一点上它已经超出我的想象。然而,在我看来,使用引用的场合应该是一个变量变化应该影响多个函数的返回值,同一个引用应该被用作这些函数中的每一个的参数。...... –

3

这很简单。当您需要修改传入该函数的变量的值时使用引用。当你不需要或想要修改该值时使用变量。因此,例如,如果您正在编写一个接受数组并且更改该数组的函数,那么最好使用该数组的引用而不是从该函数返回新数组。

+0

处理对象时不要[明确]使用引用。当你想将收到的对象复制到一个函数中时,不要做任何事情。 –

+0

对不起,这是我的头顶。我只是刚刚阅读了有关引用和变量的内容,并没有看到它们与对象的关系。也许我将不得不在稍后时间回来了解。这是我的想法,但是,如果它可以帮助你解释:对象似乎没有返回值。那么,他们如何复制到功能? –

+0

@Fohsap他们通过引用传递。 –