2015-05-16 34 views
2

在C,我們可以使用函數參數指針:如何在PHP函數中使用指針?

test(*text); 
function test(*txt){ 
//codes goes here 
} 

是否有可能在PHP?

+1

儘管PHP中沒有'指針',但您可以通過'引用':[您可以通過引用函數來傳遞變量,以便函數可以修改變量。](https://php.net/manual /en/language.references.pass.php)。例如_'function test(&$ param1);'_將允許'$ param1'在函數中被修改。 –

回答

2

PHP中的變量名以$開頭,因此$entryId是變量的名稱。 $this是在PHP面向對象的編程,這是參考當前對象的特殊變量。

->用於訪問的對象構件(如屬性或方法)在PHP中,類似於C的語法++。

因此,您的代碼意味着:將變量$entryId的值放入該對象的entryId字段(或屬性)中。

&操作者在PHP,意味着通參考。下面是一個例子:

$b=2; 
$a=$b; 
$a=3; 
print $a; 
print $b; 
// output is 32 

$b=2; 
$a=&$b; // note the & operator 
$a=3; 
print $a; 
print $b; 
// output is 33 

在上面的代碼,因爲我們使用&操作者,到了那裏$b指向被存儲在$a的參考。所以$a實際上是對$b的參考。

有指針在這個page

+0

我已更新我的答案^^。 – Maraboc

1

有引用一個很好的解釋,但是這不一樣的指針。

php.net有多個頁面解釋What References Are,What References DoWhat References Are Not
也有,多次提到

引用不是指針。

他們提供一種方式來分配$a$b因此,如果您重新分配$b$a的變化,以及:

$a = 'a'; 
$b = &$a; // Reference 
$b = 'b'; // Now $a == 'b' 

這可用於函數參數,以及:

function myFunc(&$b) 
{ 
    $b = 'b'; 
} 
$a = 'a'; 
myFunc($a); // Now $a == 'b' 

PHP 5.3.0之前,也有可能做了一個名爲「呼叫時間傳遞通過引用」,事情在這裏你將有一個「正常」的函數聲明和使用代替&運營商代替:

function myFunc($b) 
{ 
    $b = 'b'; 
} 
$a = 'a'; 
myFunc(&$a); // As of PHP 5.3.0 produces a Fatal Error, saying: 
      // Call-time pass-by-reference has been removed; If you would like to pass argument by reference, modify the declaration of myFunc(). 

但是要小心!分配另一個參考將不會更新原始參考:

$a = 'a'; 
$b = 'b'; 
$c = &$a; 
$c = &$b; // $a == 'a' 

[Demo]

從所得的捕捉器與global關鍵字存在。

$a = 'a'; 
$b = 'b'; 

function myFunc() 
{ 
    global $a, $b; 
    $a = &$b; 
    var_dump($a); 
} 

myFunc();  // 'b' 
var_dump($a); // 'a' 

這是因爲global $a實際上意味着$a = &$GLOBALS['a'],所以給它分配一個新的參考不會更新$GLOBALS
當然,您可以直接使用$GLOBALS來阻止該問題。
但是,如果你使用全局變量,那麼你應該重新考慮你的設計。

有了參考文獻,現在在設置變量= NULL和使用unset()之間也存在差異。
= NULL如下引用,unset()並不:

$a = 'a'; 
$b = &$a; 
unset($b); // $a == 'a' 

$a = 'a'; 
$b = &$a; 
$b = NULL; // $a == NULL 

[Demo]


底線:

參考允許的事情沒有他們,將是不可能的,但有時做由於PHP的構建方式,不像人們期望的那樣行事。