PHP5: указание типа данных в параметрах метода - PullRequest
4 голосов
/ 08 октября 2008

У меня есть функция, которая выглядит следующим образом

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

Я бы хотел использовать эту функцию, чтобы указать, что узел вставляется в начале, поэтому он находится после ничего . Я думаю об этом так: null означает «ничего», поэтому я бы написал свой вызов функции так:

$myNode->insertAfter(null);

За исключением того, что PHP выдает ошибку, сообщающую, что ожидал объект NSNode. Я бы хотел использовать строгую типизацию данных в своей функции, но хотел бы иметь возможность указывать значение, равное нулю.

Итак, если не изменить его на function insertAfter($node) { }, есть ли способ передать что-то еще этой функции?


Обновление: я принял ответ Оуэна, потому что он сам ответил на вопрос. Все остальные предложения были действительно хорошими, и я на самом деле буду реализовывать их в этом проекте, спасибо!

Ответы [ 3 ]

8 голосов
/ 08 октября 2008

конечно, просто установите значение по умолчанию "null"

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

результат:

$obj->insertAfter(); // no error
$obj->insertAfter(new NSNode); // no error
$obj->insertAfter($somevar); // error expected NSNode
1 голос
/ 08 октября 2008

Лучше иметь функцию insertAtBeginning () или insertFirst () для удобочитаемости в любом случае.

«То, как вы об этом думаете», может быть не так, как думает об этом следующий парень.

insertAfter (null) может означать много вещей.

Возможно, null является допустимым значением, а insertAfter означает поместить его после индекса, содержащего значение null.

1 голос
/ 08 октября 2008

Нет, вы не можете передать что-то еще функции, поскольку это противоречит цели статической типизации. В этой ситуации было бы неплохо что-то вроде C # nullable, т.е. NSNode?

Я бы предложил создать NSNode :: insertFirst (), хотя я думаю, что у вас все неправильно, почему узел вставляется сам, разве коллекция не должна вставлять и принимать узел в качестве параметра?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...