我有一个看起来像这样的功能
class NSNode {
function insertAfter(NSNode $node) {
...
}
}
我希望能够使用该函数来指示节点是在开始时插入的,因此它是在 nothing 之后。我想到的方式是null
意味着“没有”,所以我会像这样写我的函数调用:
$myNode->insertAfter(null);
除了PHP抛出一个错误,说它期待一个NSNode
对象。我想坚持在我的函数中使用严格的数据类型,但是希望能够指定一个null-esque值。
因此,如果没有将其更改为function insertAfter($node) { }
,有没有办法可以将其他内容传递给该函数?
更新:我接受了欧文的答案,因为它回答了问题本身。其他人的建议都非常好,我实际上将在这个项目中实施它们,谢谢!
答案 0 :(得分:8)
当然,只需设置默认的“null”
function(NSNode $node = null) {
// stuff....
}
结果是:
$obj->insertAfter(); // no error
$obj->insertAfter(new NSNode); // no error
$obj->insertAfter($somevar); // error expected NSNode
答案 1 :(得分:1)
不,你不能将其他东西传递给该函数,因为这会破坏静态类型的目的。在这种情况下,像C#nullable这样的东西会很好,即NSNode? p>
我建议创建NSNode :: insertFirst()尽管我认为你的方法是错误的,为什么一个节点插入自身,不应该插入集合并将节点作为参数?
答案 2 :(得分:1)
最好还有一个函数insertAtBeginning()或insertFirst()来保持易读性。
“你想到它的方式”可能不是下一个人想到它的方式。
insertAfter(null)可能意味着许多事情。
可能null是一个有效值,insertAfter表示将它放在包含值null的索引之后。