在 ruby 中,很多方法都有!
标记,这通常意味着变量将被就地修改。 所以你可以做到
p "HELLO".downcase!
这与
s = "HELLO".downcase
p s
在 php 中,您可以在变量之前使用带有 & 符号的指针来就地修改它,或者将 var 作为指针处理。 但是是否存在函数修饰符或变量修饰符,允许就地修改变量,例如
$str = "hi world";
str_replace("hi", "world", &$str)
即使在 Ruby 中,函数的!
版本也是专门为就地修改变量而创建的替代版本。 即 downcase
和downcase!
是两个完全不同的功能,!
只是一个命名约定。
在 PHP 中,你可以通过引用将变量传递到任何函数中,正如你自己所展示的那样,但这不一定会给你预期的结果,这完全取决于函数在内部对变量的作用。要获得类似于 Ruby 的结果,您必须为每个函数定义一个就地修改的替代版本:
// PHP doesn't allow ! in function names, using _ instead
function str_replace_($needle, $replacement, &$haystack) {
$haystack = str_replace($needle, $replacement, $haystack);
}
PHP 中没有指针 - 只有引用。如果您想了解可以使用它们做什么,这里有一个链接供您使用:
http://php.net/manual/en/language.references.php
你想返回引用,所以请阅读这个例子:
<?php
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.
?>
你不能修改函数的行为,尽管有些函数要用指针来修改参数。 这些函数通常返回一个布尔值,以指示函数是否成功。