几年前,我曾经使用 PHP,PHP 发生了很多变化,特别是在 OOP 部分。
当时有必要在多个地方使用 &
运算符,特别是在处理对象实例时(当时 OOP 还非常初级)以避免复制对象实例。
与 4.0 相比,PHP 5.2 似乎有很多改进,但我有点困惑。
什么时候我必须在 PHP 中使用 &
运算符以避免从 Java 程序员的角度来看出现任何不愉快的意外情况?
示例:
$a = (&)new MyClass(); //Necessary?
function factoryMethod() {
$a = (&)new MyClass(); //Necessary?
return (&) $a; //Necessary?
}
// Other cases?!
编辑:碰巧我的示例根本不需要 &
运算符。但我在哪里需要它呢?
最佳答案
简而言之:您的示例中没有任何地方。
如果我们正在处理对象
,您不必使用reference operator完全没有。
如果您正在处理其他数据类型,最常见的引用操作是:
Passing by Reference
function foo(&$var)
{
$var++;
}
$a=5;
foo($a);
// $a is 6 here
Returning References
class foo {
public $value = 42;
public function &getValue() {
return $this->value;
}
}
$obj = new foo;
$myValue = &$obj->getValue(); // $myValue is a reference to $obj->value, which is 42.
$obj->value = 2;
echo $myValue; // prints the new value of $obj->value, i.e. 2.
Looping with foreach
$arr = array(1, 2, 3, 4);
foreach ($arr as &$value) {
$value = $value * 2;
}
// $arr is now array(2, 4, 6, 8)
unset($value); // break the reference with the last element
要小心,如果您的代码在下游再次使用 $value
,那么最后一个 unset()
调用很重要。
第一种情况(通过引用传递)比第二种情况更常见,例如特别是在处理数组时:
$array = array(1, 2, 3, 4);
function modifyArray(&$data)
{
unset($data[1]);
}
modifyArrax($array);
// $array = array(0 => 1, 2 => 3, 3 => 4)
关于java - PHP 中哪里需要使用 & 运算符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1754399/