Определение нескольких типов аргументов функций в 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