PHP5:在方法参数中指定数据类型

时间:2008-10-08 03:20:39

标签: php parameters

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

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

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

$myNode->insertAfter(null);

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

因此,如果没有将其更改为function insertAfter($node) { },有没有办法可以将其他内容传递给该函数?


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

3 个答案:

答案 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?

我建议创建NSNode :: insertFirst()尽管我认为你的方法是错误的,为什么一个节点插入自身,不应该插入集合并将节点作为参数?

答案 2 :(得分:1)

最好还有一个函数insertAtBeginning()或insertFirst()来保持易读性。

“你想到它的方式”可能不是下一个人想到它的方式。

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

可能null是一个有效值,insertAfter表示将它放在包含值null的索引之后。