看到一個代碼,說是類中的usbUSB函數的參數之一可以是上面的USB這個介面作為參數,,沒聽說過PHP函數中的參數這麼使用呢,道理何在?
回複討論(解決方案)
function useUSB( USB $usb)
這個 USB 是型別宣告,如果 $usb 不是 USB 類型的話,將會有文法錯
function useUSB( USB $usb)
這個 USB 是型別宣告,如果 $usb 不是 USB 類型的話,將會有文法錯
如果是這樣,這真顛覆我對函數參數的理解,我的理解是,函數的參數就是一個變數,可以是任意值,並且沒有類型的限制。
如果是顛覆了你的理解的話,那隻能說明你的理解是有問題的
所以不是顛覆而應是增強了理解
比如 USB 類有一個 load 方法,而你
function useUSB($usb) {
$usb->load();
}
這樣定義,這樣調用 $obj->useUSB('abc');
這就會在 $usb->load() 處出現 不存在 load 方法 的錯誤
於是你就需要在 $usb->load() 之前檢查 $usb 是否是對象;是否存在 load 方法
而加上型別宣告後,這個檢查工作就由 php 解析器去完成了
你還是沒有理解我所說的問題,我的意思是說函數useUSB這個函數中的第一個參數USB是介面類USB,我不理解的是這裡,怎麼函數的參數會是一個類呢?我從很多教程中所看到的,函數中的參數就是一個可量,你定義為多少,一調用就出來了,可是這個類,是怎麼回事呢,很多教程中壓根沒有提到。就是舉一反三吧,感覺也不可思議。我不理解的是這裡。
是你沒有理解我說的意思!
函數的參數是以逗號分隔的
而 USB $usb 間有逗號嗎?
顯然是沒有的,那麼 USB $usb 就是一個參數了
你還是沒有理解我所說的問題,我的意思是說函數useUSB這個函數中的第一個參數USB是介面類USB,我不理解的是這裡,怎麼函數的參數會是一個類呢?我從很多教程中所看到的,函數中的參數就是一個可量,你定義為多少,一調用就出來了,可是這個類,是怎麼回事呢,很多教程中壓根沒有提到。就是舉一反三吧,感覺也不可思議。我不理解的是這裡。
function use( USB $usb){}
$usb是由USB類執行個體化的一個對象指標
比如 $usb1 = USB(); $usb2 = USB(); use($usb1); use($usb2);
有點開竅了,通過二位的解答,正下有點領悟,不知我這樣理解對不,函數中的()裡就是一個運算式,這個運算式中可以用聲明類的方法,比如我這個例子中USB $usb,是不是等價於$usb=new USB
這個例子中USB $usb
表示的是 $usb 必須是類 USB 或繼承於 USB 的某個類的執行個體
這個例子中USB $usb
表示的是 $usb 必須是類 USB 或繼承於 USB 的某個類的執行個體
$usb可以是usb的屬性或方法嗎???
不可以,必須是執行個體
function use(USB $usb) { }
相當於
function use($usb) {
if(! is_a($usb, 'USB')) return 'error';
}