[英]How to pass an array plus variables to a function in PHP?
我有這樣的功能原型:
function do_upload( $file, $id, $type )
我正在這樣調用函數:
$this->do_upload( $files, $id, 'article' );
但是,實際上只有$ files傳遞給了該函數。 我敢肯定這很簡單,但是我做錯了什么?
編輯:
因此,$ file只是文件信息的數組,類似於$ _FILES,它可以很好地傳遞,我在函數中對其進行了進一步的處理。
$ id是在調用函數之前設置的,如果我在函數調用之前使用了print_r(),則會看到一個期望的ID,而$ type只是一個字符串。
但是,如果我在$ id或$ type上使用print_r()或die(),它們都為空,並且var_dump()返回以下內容:
die( var_dump( $id ) );
-> string(0) ""
die( var_dump( $type );
-> bool(false)
就在函數調用之前: die( var_dump( $id) );
-> string(3) "111"
有任何想法嗎?
解:
如果任何人都有類似的問題,請在下面查看接受的答案。 基本上,我需要通過引用傳遞$ files數組,因為它耗盡了可用的堆棧空間。
謝謝
回答問題“如何將數組加變量傳遞給PHP中的函數?”
function f($x,$y){}
f(array(),$a);
即使結構與此相似,它也可以按預期工作。
class a {
function do_upload( &$file, $id, $type) {
}
}
class b extends a {
public function f() {
$files = array('a','b');
$id = "string";
$this->do_upload($files,$id,'article');
}
}
我能給出的重現所討論錯誤的唯一示例就是這個。 也許有人可以更准確?
class b extends a {
function do_upload( &$file, $id, $type) {
parent::do_upload($file, '', false);
}
public function f() {
$files = array('a','b');
$id = "string";
$this->do_upload($files,$id,'article');
}
}
我建議您再看一下Codeigniter
我認為您實際上用完了棧空間(或php內部用於調用棧的任何空間)用於函數調用。 嘗試通過引用傳遞$ files。 同樣,嘗試僅將一個字符串傳遞到$ files,看看是否可以將其他參數帶回來。
這實際上看起來是正確的。 從PHP 5開始,第一個參數是通過引用傳遞的(默認情況下,現在默認情況下所有對象和數組都通過引用傳遞),但這不會破壞任何內容。 我建議還是刪除&
。
我認為這個問題需要更多的背景。 請發布更多周圍的代碼,以便人們可以幫助您了解正在發生的事情。
有關您的代碼的一些建議* :
(1)對於方法名稱,請使用駝峰式記號而不是下划線: doUpload
原因:
(2)使用public / private / protected功能而不是僅功能,盡可能限制並在以后打開(如果需要)
原因(摘自McConnell,代碼完整,第2版,第251頁):“便利”理念(很多全球變量)與“知識可管理性”理念(盡可能本地化)之間的差異歸結為:編寫程序並閱讀它們。 擴大作用域確實可以使程序易於編寫,但是比起使用結構良好的例程的程序,其中任何例程可以隨時使用任何變量的程序更難以理解。 在這樣的程序中,您不能只理解一個例程。 您必須了解與該例程共享全局數據的所有其他例程。 此類程序難以閱讀,難以調試和修改。
因此, 您應該聲明每個變量對需要查看它的最小代碼段可見 。
(3)如果要聲明某些方法參數為可選,請不要使用錯誤的類型設置默認值。 $id
很可能是整數,因此請勿將其設置為$id = ''
字符串。 將其設置為例如0或null。 (代碼可讀性強,提示錯誤情況)
*推薦是一種信息,信息提供者認為該信息將有助於改善相關情況
如何檢查is_array()? 我看過很多代碼,他們在其中檢查變量,如果不是數組,它們會執行以下操作:
if (!is_array($files)) }
$f = $files;
$files = new array();
$files[] = $d
}
foreach( $files as $f ) {
// whatever...
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.