在 php 函数中使用指针或修饰符


Using pointers or modifiers in php functions

在 ruby 中,很多方法都有!标记,这通常意味着变量将被就地修改。 所以你可以做到

p "HELLO".downcase!

这与

s = "HELLO".downcase
p s

在 php 中,您可以在变量之前使用带有 & 符号的指针来就地修改它,或者将 var 作为指针处理。 但是是否存在函数修饰符或变量修饰符,允许就地修改变量,例如

$str = "hi world";
str_replace("hi", "world", &$str)

即使在 Ruby 中,函数的!版本也是专门为就地修改变量而创建的替代版本。 即 downcasedowncase!是两个完全不同的功能,!只是一个命名约定。

在 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.
?>

你不能修改函数的行为,尽管有些函数要用指针来修改参数。 这些函数通常返回一个布尔值,以指示函数是否成功。