6

配列に値があるかどうかを確認する必要がある場合、そうでない場合-変数のデフォルト値を設定するには、次のようにします

$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';
4

0 に答える 0