Использование функции для значения параметра по умолчанию в конструкторе в PHP

Обходной путь был описан здесь: функция PHP как параметр по умолчанию

Но мне было интересно, почему это не работает:

class Foo extends Bar {
function __construct($paramsIn=array("timestamp"=>time()-7200,"api-key"=>"blah"),                       
                         $urlIn="http://www.example.com/rest")
{ //...etcetc
}

Я получаю сообщение об ошибке:

Ошибка синтаксического анализа: синтаксическая ошибка, неожиданное '(', ожидание ')' в filename.php

Это конкретно связано с вызовом time().


person Charlene Barina    schedule 03.06.2014    source источник


Ответы (1)


Значение по умолчанию для аргументов функции поддерживает только литералы, то есть строки, числа, логические значения, null и массивы. Вызовы функций, такие как time(), не поддерживаются. Причина этого в том, что сигнатура функции должна описывать интерфейс и не зависеть от значений среды выполнения. То же самое относится к инициализации свойств объекта в классе.

Как указывает ваша ссылка, обходной путь заключается в использовании null и обработке его в теле функции.

function __construct($paramsIn=array("timestamp"=> null,"api-key"=>"blah"),                       
                         $urlIn="http://www.example.com/rest")
{
    if(!isset($paramsIn['timestamp']) || is_null($paramsIn['timestamp'])){
        $paramsIn['timestamp'] = time() - 7200;
    }

    // this is now the equivalent of having time() as a default value
}
person MrCode    schedule 03.06.2014