2013-03-10 113 views
4

我知道您可以將可變數量的參數傳遞給函數並單獨訪問它們。PHP - 通過引用傳遞可變數量的參數

例如

function foo() 
{ 
    $arg = func_get_arg(0); 
    $arg += 10; 
} 

$a = 100; 

foo($a); 

echo "A is $a\n"; 

但是,這些參數通過值傳遞如上所示。

是否有可能使用它們,就像它們通過引用以類似的方式通過mysqli庫中的bind_param一樣?

+0

也許http://php.net/manual/en/function.func-get-arg.php,例如#3,可以幫助你 – Amir 2013-03-10 11:48:37

+0

@Amir示例3對變量數量的參數沒有幫助,因爲通常會從方法簽名中省略這些參數,所以不能用&表示它們。 – Gordon 2013-03-10 12:42:07

回答

1

我想提的第一件事:Don't use references。除此之外:直接做這件事是不可能的,因爲引擎在調用函數之前必須知道某件事是否是引用。你可以做的是通過引用數組:

$a = 1; $b = 2; $c = 3; 
$parameters = array(&$a, &$b, &$c, /*...*/); 
func($parameters); 

function func(array $params) { 
    $params[0]++; 
} 
+2

如果你知道你在做什麼(並且我會實現一個可以在完成時修改多個參數的函數),那麼引用沒有任何問題。任何足夠的插件爲您的網站。 – 2013-03-10 12:19:38

+1

在99%的案例中,有比使用參考更好的設計。例如使用面向對象的設計。面向對象的設計可以更清潔,更易維護,尤其是PHP 5.4,速度更快,所需內存更少。 – johannes 2013-03-10 12:32:53

+3

99%從哪裏來? – 2013-03-10 12:48:29

1

你不能,只是你不能告訴PHP,這是通過引用,而不是,但!我建議做以下幾點:

function foo() 
{ 
    $arg = func_get_arg(0); 
    $arg->val += 10; 
} 
$a =new stdClass(); 
$a->val = 100; 
foo($a); 
echo "$a\n"; // 110 

你可以申請拳擊到你想要的價值和它的作品, 希望對您有所幫助,如果您有任何疑問請詢問。

+1

@Nathaniel:不要進行添加大量額外信息的編輯。在評論中或在新的答案中這樣做。 – Emil 2013-03-10 13:17:42

+0

我同意你@Emil – Hilmi 2013-03-11 08:42:44