Определение нескольких типов аргументов функций в PHP
можно ли определить аргумент функции как несколько возможных типов? Например, для выполнения функции может потребоваться строка или целое число. Можно ли как-то определить это?
function something(int|string $token) {}
или поддерживается только один тип на аргумент?
(имейте в виду, я знаю, что могу фильтровать ввод позже, мне просто нравится, чтобы мои аргументы были набраны)
3 ответов
лучшее, что вы можете сделать, называется намеком типа и объясняется здесь:
http://php.net/manual/en/language.oop5.typehinting.php
в частности, вы можете указать тип класса или тип массива, но (как говорится в руководстве) "традиционный тип, намекающий на int и string, не поддерживается.- Итак, я полагаю, что то, чего вы пытаетесь достичь, невозможно на этом уровне.
однако вы можете создавать свои собственные обертки и т. д. Есть наверное тысячи способов справиться с этим.
нет, это невозможно.
кроме того, тип hinting в PHP 5 теперь только для классов и массивов. http://php.net/manual/en/language.oop5.typehinting.php
class Foo
{
}
function something(Foo $Object){}
PHP динамически типизирован, но в язык добавлен намек на тип, поэтому, если вы не намекнули на параметр, вы можете передать любой тип:
function something($token)
{
if (is_numeric($token)) {
// its a float, double, integer
} else {
// its a string, array, object
}
}
(С моей головы я не уверен, как обрабатываются ресурсы).
однако, если вы хотите программировать на строго типизированном языке, то (IMHO) вы должны использовать что-то другое, чем PHP