2012-05-02 2 views
5

Есть ли способ потребовать, чтобы параметр функции был конкретным типом данных, таким как массив? Например, примерно так:PHP. Есть ли способ, чтобы параметр функции был массивом?

function example(array $array){} 

Если это так работает для всех типов данных? Есть ли хороший ресурс, который показал бы мне, как это сделать?

+5

Не для всех, но для массивов и типов (классов/интерфейсов) , Вы обнаружите, что это описано в руководстве. Сначала сделайте домашнее задание и посмотрите там, он отвечает на ваш вопрос гораздо более подробно. – hakre

+0

http://me.veekun.com/blog/2012/04/09/php-a-fractal-of-bad-design/#functions – maialithar

ответ

3

Edit: Да, вы можете ввести-подсказка с массивами, поэтому отредактировал мой ответ, и соответствующим образом изменить.

Что вы хотите сделать, называется type-hinting. Вы не можете вводить основные типы данных подсказки, такие как int, string, bool. Вы можете ввести-подсказку с array или объектов и интерфейсов:

function example_hinted1(array $arr) { 

} 

function example_hinted2(User $user) { 

} 

Вызов example_hinted1(5) будет генерировать фатальную ошибку PHP (не исключение), но называть его передачи массива полностью нормально.

Если вы должны быть уверены в том, что некоторые аргументы функции от базового типа вы можете смоделировать такое поведение с кодом внутри функции:

function example($number) { 
    if (!is_int($number) { 
    throw new Exception("You must pass an integer to ".__FUNCTION__."()"); 
    } 
    // rest of your function 
} 

Таким образом, эти фрагменты будут работать:

example(1); 

$b = 5 + 8; 
example($b); 

в то время как они будут бросать исключение:

example('foo'); 
example(array(5, 6)); 
example(new User()); 
+0

Спасибо за хорошо объясненный ответ, это очень помогло. –

Смежные вопросы