2008-10-08 78 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值的索引之后。

相关问题