PHP5: указание типа данных в параметрах метода

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

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

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

$myNode->insertAfter(null);

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

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


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

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
4
0
898
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

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

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

Ответ принят как подходящий

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

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

результат:

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

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

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

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

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

Другие вопросы по теме