2011-05-16 61 views
1

在紅寶石很多方法具有!標記這通常意味着一個變量將在適當位置被修改使用指針或改性劑。所以,你可以做在PHP函數

p "HELLO".downcase! 

這是一樣的

s = "HELLO".downcase 
p s 

在PHP中,你可以一個變量之前使用指針與符號&符號進行修改的地方,或處理VAR爲指針。但確實功能調節器存在或變量修改,將允許在varibales的地方修改像

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

回答

2

即使在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); 
} 
+0

如果你想要從函數返回引用,它的聲明必須在名稱之前包含&符號 - 就像我的答案一樣。 – 2011-05-16 03:32:14

+0

@Tomasz的確,但這與問題無關。 :) – deceze 2011-05-16 03:50:00

0

不能修改函數的行爲,雖然有些功能需要一個指針修改一個參數。這些函數通常會返回一個布爾值來指示函數是否成功。

1

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