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

PHP5:在方法参数中指定数据类型,php,parameters,Php,Parameters,我有一个像这样的函数 class NSNode { function insertAfter(NSNode $node) { ... } } 我希望能够使用该函数指示节点在开始时被插入,因此它不在后面。我认为,null表示“无”,因此我会这样编写函数调用: $myNode->insertAfter(null); 除此之外,PHP抛出一个错误,表示它需要一个NSNode对象。我希望在函数中使用严格的数据类型,但希望能够指定一个空值 那么,除了将其更改为函数

我有一个像这样的函数

class NSNode {
    function insertAfter(NSNode $node) {
        ...
    }
}
我希望能够使用该函数指示节点在开始时被插入,因此它不在后面。我认为,
null
表示“无”,因此我会这样编写函数调用:

$myNode->insertAfter(null);
除此之外,PHP抛出一个错误,表示它需要一个
NSNode
对象。我希望在函数中使用严格的数据类型,但希望能够指定一个空值

那么,除了将其更改为
函数insertAfter($node){}
,还有什么方法可以将其他内容传递给该函数吗



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

不,不能将其他内容传递给函数,因为这样会破坏静态键入的目的。在这种情况下,像C#nullable这样的东西会更好,比如NSNode

我建议创建NSNode::insertFirst(),尽管我认为这是错误的,但为什么节点会插入自身,集合不应该插入节点并将其作为参数

当然,只需设置默认值“null”

结果是:

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

无论如何,最好有一个函数insertBeginning()或insertFirst(),以确保可读性

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

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

可能null是一个有效值,insertAfter意味着将其放在包含null值的索引之后

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