2008-10-08 79 views
4

我有一個看起來像這樣PHP5:在方法指定數據類型參數

class NSNode { 
    function insertAfter(NSNode $node) { 
     ... 
    } 
} 

我希望能夠使用該功能,以表明該節點被插入在一開始的功能,因此,它在之後沒有什麼。我想想的方式是null意思是「一無所有」,所以我會寫我的函數調用是這樣的:

$myNode->insertAfter(null); 

除了PHP拋出一個錯誤說,它期待的NSNode對象。我想堅持在我的函數中使用嚴格的數據類型,但希望能夠指定一個null-esque值。

因此,短時間將其更改爲function insertAfter($node) { },有沒有辦法將其他功能傳遞給該功能?


更新:我接受了歐文的答案,因爲它回答了問題本身。其他人的建議非常好,我將在這個項目中實際執行它們,謝謝!

回答

8

肯定,只是設置一個默認的 「空」

function(NSNode $node = null) { 
// stuff.... 
} 

結果是:

$obj->insertAfter(); // no error 
$obj->insertAfter(new NSNode); // no error 
$obj->insertAfter($somevar); // error expected NSNode 
1

不,你不能將其他東西傳遞給函數,因爲這會破壞靜態類型的目的。在這種情況下,類似C#的空字符會很好,例如NSNode?

我建議創建NSNode :: insertFirst(),雖然我認爲你有錯誤的方式,爲什麼一個節點插入本身,不應該集合插入並將節點作爲參數?

1

最好有易於識別的功能insertAtBeginning()或insertFirst()反正。

「你對它的看法」可能不是下一個人想到它的方式。

insertAfter(null)可能意味着很多事情。

也許null是一個有效值,insertAfter表示將它放在包含null值的索引之後。

相關問題