4

私はこのような機能を持っています

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

その関数を使用して、ノードが最初に挿入されていることを示すことができるようにしたいと考えています。それについて私が考える方法は、null「何もない」ことを意味するので、関数呼び出しを次のように記述します。

$myNode->insertAfter(null);

ただし、PHP は、NSNodeオブジェクトが必要であるというエラーをスローします。関数で厳密なデータ入力を使用することに固執したいのですが、null 風の値を指定できるようにしたいと考えています。

それで、それを に変更する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 に答える