2013-05-05 62 views
3

查看PHP有關接口的文檔,特別是在這裏:PHP: Object Interfaces - Manual。下面的代碼是作爲一個工作示例給出的。有人可以解釋一下,作爲函數簽名的一部分被宣佈的裸字「Baz」是什麼意思?PHP - 在接口函數聲明中使用裸詞

<?php 
interface a 
{ 
    public function foo(); 
} 

interface b extends a 
{ 
    public function baz(Baz $baz); 
} 

// This will work 
class c implements b 
{ 
    public function foo() 
    { 
    } 

    public function baz(Baz $baz) 
    { 
    } 
} 

回答

4

它被稱爲type hinting

baz()方法預計第一個參數$bazBaz類型的對象。對象的類型來自它所構建的類,或者來自它實現的接口。

+0

你們這樣做太簡單了。 20分鐘的各種搜索谷歌PHP功能裸字和類似的東西。即使是在這裏的迴應告訴某人使用這樣的裸詞在編程中是聞所未聞的!快速發佈在這裏,並在10分鐘內...砰! :) – dewd 2013-05-05 13:43:03

+0

我大概用了幾個小時弄清楚和理解這樣的東西。當某件事情難以勝出時,很容易將其解釋清楚。 – 2013-05-05 13:48:16

+0

確實如此。我發現我得到的東西很快就從我的知識中消失,如果它們不被使用,就會很快消失。我會記住這一個! :) – dewd 2013-05-05 13:57:06

0

作爲每documentation它被稱爲類型暗示

巴茲是類名

並且因此巴茲方法預期的第一個參數,$ baz,將成爲對象

+0

是的,文檔是偉大的,當你知道你在找什麼!顯然,我不知道尋找類型暗示。感謝您的鏈接。 – dewd 2013-05-05 13:39:55

+0

乾杯@dewd。希望你有你的答案。確保接受所有你喜歡的答案。 – 2013-05-05 13:41:31

2

在c類中,函數baz()需要一個參數,它是類Baz的對象。 $baz只是對象名稱。它在baz()的功能中使用。

這就是所謂的Type Hinting

PHP 5只引入了類型提示。函數現在能夠強制 參數成爲對象(通過在 函數原型中指定類的名稱),接口,數組(從PHP 5.1開始)或可調用的 (從PHP 5.4開始)。但是,如果將NULL用作默認參數 的值,則它將被允許作爲任何稍後調用的參數。

如果類或接口被指定爲類型提示,則其所有子項 或實現也被允許。

類型提示不能用於標量類型,如int或string。 性狀也是不允許的。