Вы не можете набирать строки подсказки, вы можете только печатать объекты подсказки и массивы, поэтому это неверно:
function setName ( string $name = "happ") {
(Причина, по которой вы не получаете ошибку времени компиляции, заключается в том, что PHPинтерпретировать «строку» как имя класса.)
Формулировка в документе означает, что если вы сделаете это:
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);
}
[Edit 1]
Начиная с PHP 5.4, вы можете напечатать подсказку callable
:
function foo(callable $callback) {
call_user_func($callback);
}
[Edit 2]
Начиная с PHP 7.0, вы можете набирать подсказки bool
, float
, int
и string
.Это делает код в вопросе допустимым синтаксисом.Начиная с PHP 7.1, вы можете напечатать подсказку iterable
.