Определение нескольких типов аргументов функций в PHP - PullRequest
7 голосов
/ 24 октября 2011

Можно ли определить аргумент функции как несколько возможных типов?Например, функция может взять строку или целое число для выполнения чего-либо.Можно ли как-то определить это так?

    function something(int|string $token) {}

Или поддерживается только один тип для аргумента?

(учтите, я знаю, что позже я могу фильтровать ввод, мне просто нравитсячтобы мои аргументы были набраны)

Ответы [ 3 ]

3 голосов
/ 24 октября 2011

Нет, это невозможно.

Кроме того, подсказки типов в PHP 5 теперь доступны только для классов и массивов. http://php.net/manual/en/language.oop5.typehinting.php

class Foo
{
}

function something(Foo $Object){}
2 голосов
/ 24 октября 2011

Лучшее, что вы можете сделать, называется Type Hinting и объясняется здесь:

http://php.net/manual/en/language.oop5.typehinting.php

В частности, вы можете указывать тип класса или тип массива, но (как говорится в руководстве) «Подсказка традиционного типа с помощью int и string не поддерживается». Поэтому я думаю, что то, что вы пытаетесь достичь, не возможно на этом уровне.

Однако вы можете создавать свои собственные обертки и т. Д. Вероятно, есть тысячи способов справиться с этим.

0 голосов
/ 24 октября 2011

PHP динамически типизирован - но подсказка типа была добавлена ​​в язык - поэтому, если вы не указали параметр, вы можете передать любой тип, который вам нравится:

function something($token) 
{
   if (is_numeric($token)) {
     // its a float, double, integer

   } else {
     // its a string, array, object
   }
}

(с верху моегоголова Я не уверен, как обрабатываются ресурсы).

Однако если вы хотите программировать на строго типизированном языке, то (ИМХО) вам следует использовать что-то отличное от PHP

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