簡體   English   中英

如何將數組加變量傳遞給PHP中的函數?

[英]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

原因:

  • 可讀性:輕松區分本機php函數
  • 懶惰:少寫,不要下划線
  • 感知:格式塔原則,將相關事物緊密聯系在一起

(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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM