配列に値があるかどうかを確認する必要がある場合、そうでない場合-変数のデフォルト値を設定するには、次のようにします
$authToken = isset($response['fbData']['authResponse']['accessToken']) ? $response['fbData']['authResponse']['accessToken'] : null;
どうにかして読みやすくする方法はありますか?
三項演算子の短いバージョンがあります
$authToken = $sourceVar ?: null;
ここでソースを 2 回繰り返す必要はありませんが、$response['fbData']['authResponse']['accessToken']
代わりに$sourceVar
- を使用すると、php 警告メッセージが表示されるため、配列では機能しません。
使うことができます@
$authToken = @$response['fbData']['authResponse']['accessToken'] ?: null;
で「@」がすごく速くなったと聞いたのですPHP 5.4
が、とにかくこれは好きではありません。
私はこのようなものを使うことができます
$a = isset($response['fbData']['authResponse']['accessToken']) ?: null;
しかし、この場合、結果として TRUE を取得しisset()
ます。
それで、多分誰かがそれを正しく行う方法を知っていますか?
Upd1:推奨トピックPHP で新しいオペレーターを作成するにはどうすればよいですか? ユーザーが「PHPを変更する方法」と新しいオペレーターを作成する方法を尋ねるため、私の質問には答えません。それは必要無い。PHP を変更せずに同様のことを行う方法がいくつかありますが、それらは配列では機能しません ($response['fbData']['authResponse']['accessToken']
警告メッセージが生成されるため、このようなものを関数に渡すことはできません)。
Upd2: NikiCのおかげで問題が解決しました (以下のコメントを参照)。アイデア: 配列要素をリンクとして渡す場合、PHP は警告メッセージを生成しないため、次のようなものを使用する機会が与えられます。
function myIsset (&$var, $defaultVal = null) {
return isset($var) ? $var : $defaultVal;
}
$authToken = myIsset($response['fbData']['authResponse']['accessToken']);
UPD2 2015 年 10 月 27 日: PHP 7 には??
、この問題を完全に解決する新しい素晴らしい演算子 (null 合体演算子) があり、これが最善の方法です。最初のオペランドが存在し、NULL でない場合はそれを返します。それ以外の場合は、2 番目のオペランドを返します。
$authToken = $response['fbData']['authResponse']['accessToken'] ?? 'any_default_value';
また、要求された配列キーが存在しない場合は、生成されませんphp notice
。
空でない値を探して、次のようにも使用できます。
$username = $_GET['user'] ?? $_POST['user'] ?? 'nobody';