2014-11-04 54 views
0

我有一個函數,其中參數與參考一起傳遞(&)。不過,如果我設置參數爲NULL,我得到的錯誤:避免無法在函數中傳遞參考錯誤

「無法通過引用傳遞參數1 ...」

這是腳本:

<?php 
function doSomething(&$reference,$arg1,$arg2){ 
    if($reference !== NULL){ 
     //Do something with reference 

    }else{ 
     //Do something else 
    } 
} 

//Call with reference 
doSomething($a,$b,$c); 

//Call without reference 
//doSomething(NULL,$b,$c); 
?> 

這是我認爲由於NULL沒有被聲明爲變量,而是立即在函數本身中聲明。它的工作原理,當我這樣做:

$nullVar = NULL; 
doSomething($nullVar,$b,$c); 

如何編輯我的功能,這樣就不會顯示參考錯誤時,我只是把空的功能,只保留參考在可能的情況(因爲我不使用

function doSomething($arg1,$arg2, &$reference = null){ 
    if($reference !== NULL){ 
     //Do something with reference 

    }else{ 
     //Do something else 
    } 
} 

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

doSomething($a, $b); 

但經過null到第三個參數仍然會導致錯誤:),當它被設置爲NULL參考

+1

我認爲你不能避免這一點 - 只有變量可以通過引用傳遞,NULL不是一個變量。 – Mikk 2014-11-04 13:19:09

回答

2

如果換成了參數的位置,您仍然可以創建一個可選的參考。

doSomething($a, $b, null); // error 

也可以通過新創建的變量來滿足引用。由於沒有賦值的變量默認爲null,因此您可以提供一個變量,而不打算在之後使用它。

doSomething($a, $b, $unused_var); 
+0

這只是一個簡單的例子,但是當有例如2個引用參數時,這仍然不起作用。 – user3053216 2014-11-04 14:23:25

+0

@ user3053216已更新,以便您瞭解如何避開它。 – Flosculus 2014-11-04 14:28:59

0

你不能引用NULL,它不存在。老實說,在調用函數並運行if($ reference!== NULL)塊之前檢查null。或者你可以把這個函數分成兩個單獨的函數,一個是$ reference是空的,另一個是$ reference指向的東西。