2016-06-29 5 views
0

私はオブジェクトがあります。PHP三項演算子オブジェクトの割り当て

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

私はENV(「ADMIN_LAST_NAME」、NULL)の形で環境変数を読み取ろうとするように三項演算子を使用しようとしていますが、それenv変数が存在しない場合にのみ関数を呼び出す必要があります。例えば

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

は、これは正しい方法ですか?

+2

'env()'が返すものに依存すると思いますが、関数を共有できますか? –

+0

が優先順位の問題である可能性があります。試してみるために濁りを使用してください。 –

+1

これは動作するのか動作しないのですか?結果は何ですか? – AbraCadaver

答えて

1

このコードは機能しますが、改善することができます。

true句の代替ケースはないので、簡略三項演算子を使用できます。

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

さらに、null値はif節に対してfalseを返しますが、それはあまり正確ではなく、固有でもありません。ヌル値を明示的にチェックする場合は、is_nullを使用してください。 nullまたはfalseを指定する場合は、emptyを使用します。このような場合、真偽句は両方とも別のエンティティを返さなければならないので、省略表現を使用することはできません。

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

あなたはENVへの複数の呼び出しを取り除くことにより、さらに一歩それを取ることができます。

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

これはコードスタイルと好みの問題です。コードベース全体で一貫性を保つだけです。

1

ternary operator shortcutを使用する方がよい場合があります。

PHP 5.3以降では、3項演算子の中間部分を省略することができます。式expr1?:expr1は、expr1がTRUEと評価された場合はexpr1を返し、それ以外の場合はexpr3を返します。

この方法ではenv()関数は一度だけ(の代わりに、2回)と呼ばれます。

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

''nullまたはfalseは姓の有効な管理者でない限り、それは正常に動作します。