2016-06-29 3 views
0

У меня есть объект:PHP назначение объекта троичного оператора

$info = [ 
    'last_name' => $this->askForLastName(), 
]; 

Я пытаюсь прочитать переменные окружения в виде окр («ADMIN_LAST_NAME», NULL) и пытаюсь использовать тройной оператор так, что должен только вызывать функцию, если переменная env не существует.

Например:

$info = [ 
    'last_name' => env('ADMIN_LAST_NAME', null)? env('ADMIN_LAST_NAME', null) : $this->askForLastName(), 
]; 

Является ли это правильный путь?

+2

Я полагаю, что это зависит от того, что возвращает 'env()', не могли бы вы поделиться этой функцией? –

+0

может быть проблемой приоритета, используйте parentesis, чтобы попробовать и убедитесь, что это –

+1

Так оно работает или не работает? Каков результат? – AbraCadaver

ответ

1

Этот код должен работать, но его можно улучшить.

Во-первых, поскольку альтернативного случая для предложения true нет, вы можете использовать сокращенный тернарный оператор.

['last_name' => env('ADMIN_LAST_NAME', NULL) ?: $this->askForLastName()'];

Кроме того, в то время как нулевое значение вернет false для предложения if, оно не очень точное или конкретное. Если вы хотите явно проверить нулевые значения, используйте is_null. Если вы хотите иметь значение null или false, используйте empty. В таком случае вы не сможете использовать сокращенное выражение, так как оба предложения true/false должны возвращать отдельный объект.

['last_name' => is_null(env('ADMIN_LAST_NAME', NULL)) ? $this->askForLastName() : env('ADMIN_LAST_NAME', NULL)]

Вы можете взять его на шаг вперед, избавившись от многочисленных звонков в окр.

['last_name' => is_null(($adminLastName = env('ADMIN_LAST_NAME', NULL))) ? $this->askForLastName() : $adminLastName].

Это вопрос стиля кода и предпочтения. Просто держите его в соответствии со своей кодовой базой.

1

Возможно, было бы лучше использовать ternary operator shortcut.

С PHP 5.3 можно исключить среднюю часть тернарного оператора. Expression expr1?: Expr3 возвращает expr1, если expr1 имеет значение TRUE и expr3 в противном случае.

Таким образом, функция env() будет называться только один раз (а не в два раза):

$info = [ 
    'last_name' => env('ADMIN_LAST_NAME', null) ?: $this->askForLastName(), 
]; 

Это будет работать нормально, если '', null или false действительны админы фамилия.

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