Тип Hinting: параметры по умолчанию

Тип подсказки

PHP 5 вводит Type Hinting. Теперь функции могут заставить объекты быть объектами (путем указания имени класса в прототипе функции) или массивов (начиная с PHP 5.1). Однако, если NULL используется как значение параметра по умолчанию, он будет разрешен в качестве аргумента для любого последующего вызова.

Следующая выдержка из вышесказанного:

если NULL используется как значение параметра по умолчанию, он будет разрешен в качестве аргумента для любого последующего вызова.

Означает ли это следующее:
если параметры по умолчанию использовать с типом, он может иметь только значение NULL в качестве значения по умолчанию.

т.е. код в коде1 неверен и приводит к:
Неустранимая ошибка: значение по умолчанию для параметров с подсказкой типа класса может быть только NULL

code1:

function setName ( string $name = "happ") { ... } 

Если код в коде2 прав:

code2:

  function setName ( string $name = NULL) { ... } 

Почему это ограничение назначено в php?

Related of "Тип Hinting: параметры по умолчанию"

Вы не можете вводить строки, вы можете вводить только объекты и массивы типа type, поэтому это неверно:

 function setName ( string $name = "happ") { 

(Причина, по которой вы не получаете ошибку времени компиляции, заключается в том, что PHP интерпретирует «string» как имя класса.)

Формулировка в документах означает, что если вы это сделаете:

 function foo(Foo $arg) { 

Тогда аргумент, переданный foo (), должен быть экземпляром объекта Foo. Но если вы это сделаете:

 function foo(Foo $arg = null) { 

Тогда аргумент, переданный foo (), может быть либо экземпляром объекта Foo, либо null. Также обратите внимание, что если вы выполните следующее:

 function foo(array $foo = array(1, 2, 3)) 

Тогда вы не можете вызвать foo (null). Если вы хотите эту функциональность, вы можете сделать что-то вроде этого:

 function foo(array $foo = null) { if ($foo === null) { $foo = array(1, 2, 3); } 

Изменить: Начиная с PHP 5.4, вы также можете набирать текст:

 function foo(callable $callback) { call_user_func($callback); } 

Это вопрос времени времени компиляции и времени выполнения. При компиляции допускаются только буквенные значения (строки, числа, логические и NULL). В настоящее время PHP-процессор не может знать обо всех возможных классах, поэтому вы не можете создать экземпляр объекта в аргументах функции.

То, что я ожидаю от выдержки, состоит в том, что, в то время как обычная передача NULL в тип намеченной функции вызовет исключение / ошибку. Если вы установите значение по умолчанию как NULL, то это исключение не будет выбрано, если NULL передан. Я не проверял это, просто то, что я ожидал бы.

Вы не можете вводить строки, вы можете вводить только объекты и массивы.

В самом деле?

Итак, проверьте это: https://gist.github.com/qeremy/cd5de6397dd732751fec

@ThinkingMonkey; Вы можете использовать его таким образом в любое время, если хотите, но вы можете передавать только NULL в качестве значения по умолчанию.

 function foo(int $x, float $y) { print $x * $y; } foo(3, 1.5); foo(3, 1); // boom! class User { public function theName(string $name) { print $name; } } $u = new User(); $u->theName('kerem'); 

попробуй это

 function setName ($name = "happ") { ... }