2015-11-29 19 views
0

我不理解php.net中的以下示例。誰能解釋一下?不瞭解php.net中的呼叫用戶函數示例

<?php 
 
error_reporting(E_ALL); 
 
function increment(&$var) 
 
{ 
 
    $var++; 
 
} 
 

 
$a = 0; 
 
call_user_func('increment', $a); 
 
echo $a."\n"; 
 

 
// You can use this instead 
 
call_user_func_array('increment', array(&$a)); 
 
echo $a."\n"; 
 
?>
什麼陣列(& $ a)指? $ a的初始值是多少?

+0

你到底明白了什麼? – Mureinik

+0

call_user_func_array('increment',array(&$a)); –

+0

)數組(&$ a)是什麼意思?$ a的初始值是什麼? –

回答

0

docs指出「call_user_func()的參數不通過引用傳遞」。在給定的例子

function increment(&$var) 
{ 
    $var++; 
} 
call_user_func('increment', $a); 

$a的值不會遞增,PHP將拋出一個警告,而不是Parameter 1 to increment() expected to be a reference, value given。 Callabe內部的代碼將不會執行,但call_user_func()的結果爲NULL。

因爲Call-time pass-by-reference已在PHP 5.4中刪除,所以您不能使用call_user_func('increment', &$a)調用函數。 這是這個例子應該證明的。

使用call_user_func_array()允許參數作爲參考被傳遞,所以

$a = 0; 
call_user_func_array('increment', array(&$a)); 

結果1.

要使用可調用沒有參考,return從函數的值,並指定這個返回值以美元代替:

function increment($var) 
{ 
    $var++; 
    return $var; 
} 

$a = 0; 
$a = call_user_func('increment', $a); 
print 'a: ' . $a . PHP_EOL; 

結果:

a: 1 
+0

<?php error_reporting(E_ALL); function increment (&$變種) { $變種++;} call_user_func_array( '增量',陣列(&$a)); 回聲$一個 「\ n」 個。? >輸出1如何BCZ我沒有給$ a賦值? –

+0

您不必這樣做,它是一個引用,函數調用之前'$ a'的值爲'(int)0'。如需進一步解釋,請點擊上面的評論中的鏈接Rizier123。 –