4

我有一个看起来像这样的功能

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

我希望能够使用该函数来指示节点是在开始时插入的,因此它在nothing之后。我认为这null意味着“什么都没有”,所以我会这样写我的函数调用:

$myNode->insertAfter(null);

除了 PHP 抛出一个错误,说它期待一个NSNode对象。我想坚持在我的函数中使用严格的数据类型,但希望能够指定一个空值。

那么,除了将其更改为 之外function insertAfter($node) { },有没有办法可以将其他内容传递给该函数?


更新:我接受了欧文的回答,因为它回答了问题本身。其他人的建议真的很好,我会在这个项目中实际实施它们,谢谢!

4

3 回答 3

8

当然,只需设置一个默认的“null”

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

结果是:

$obj->insertAfter(); // no error
$obj->insertAfter(new NSNode); // no error
$obj->insertAfter($somevar); // error expected NSNode
于 2008-10-08T03:25:50.920 回答
1

不,您不能将其他内容传递给函数,因为这违背了静态类型的目的。在这种情况下,像 C# nullable 这样的东西会很好,即 NSNode?

我建议创建 NSNode::insertFirst() 虽然我认为你有错误的方式,为什么节点会插入自己,集合不应该插入并将节点作为参数?

于 2008-10-08T03:23:58.740 回答
1

无论如何,最好有一个函数 insertAtBeginning() 或 insertFirst() 以提高可读性。

“你的想法”可能不是下一个人的想法。

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

也许 null 是一个有效值,而 insertAfter 意味着将它放在包含 null 值的索引之后。

于 2008-10-08T03:30:36.450 回答