web-dev-qa-db-ja.com

ElseステートメントなしでTernary演算子を使用するPHP

PHPで「else」ステートメントを終了せずに三項演算子を使用できますか?私は試してみましたが、エラーが返されます。Google検索では何も得られないので、答えはおそらくいいえ、ここで再確認したいと思います。

if ( isset($testing) {
  $new_variable = $testing;
}

$ testingが存在する場合にのみ$ new_variableを設定します。今私はできる

$new_variable = (isset($testing) ? $testing : "");

ただし、$ testingが設定されていない場合は、$ new_variableに空の変数が返されます。空の変数が設定されていない場合は、$ new_variableを作成しないでください。

私は試した

$new_variable = (isset($testing) ? $testing);

そしてそれはエラーを返しました。私も試しました

$new_variable = (isset($testing) ? $testing : );

エラーも返しました。 elseステートメントを添付せずにTernary演算子を使用する方法はありますか、それとも手書きでそれを書き続けるのですか?

編集:Rizier123のアドバイスに従って、方程式の 'else'の部分をNULLに設定しようとしましたが、それでも配列にキーが追加されてしまいます。価値はありませんが、鍵は私の計画を台無しにすることです。さらに説明させてください。

コードはフォームから一連の$ _POST変数を取得し、それらをstdClassのパラメーターに使用して、APIメソッド呼び出しに使用します。すべてのAPI呼び出しで同じ変数に適用されるため、フォーム変数の一部は存在しませんが、ユーザーは1つしか選択できません。例として、3つの項目を選択できます。選択した項目のいずれかがstdClassに渡され、残りの2つは存在しません。

私はこれを試しました:

$yes_this_test = "IDK";
$setforsure = "for sure";
$list = new stdClass;
$list->DefinitelySet = $setforsure;
$list->MaybeSet = (isset($yes_this_test) ? $yes_this_test : NULL);
$list->MaybeSet = (isset($testing) ? $testing : NULL);
print_r($list);

ただし、(isset($ testing)が(isset($ yes_this_test)の後にあり、それが返されるため、MaybeSetはNULLに設定されます

stdClass Object ( [DefinitelySet] => for sure [MaybeSet] => )

$ _POST変数の順序がわからないので、リストを正しい順序で処理できるように構造化することはできません。

今、私は次のようなことができることを知っています

if ( isset($yes_this_test ) {
  $list->MaybeSet = $yes_this_test;
}
elseif ( isset($testing) ) {
  $list->MaybeSet = $testing;
}

しかし、私はこれらのロジックの数十を書かなければならないので、このタイプのロジックの省略表現があることを望んでいました。 if/elseifステートメントで使用される三項演算子に類似した演算子はありますか?

30
Longblog

PHP 5. なので、これを行うことができます:

!isset($testing) ?: $new_variable = $testing;

ご覧のとおり、条件がfalseの場合にのみ部分を使用するため、isset式を否定する必要があります。

[〜#〜]更新[〜#〜]

PHP 7. なので、これを行うことができます:

$new_variable = $testing ?? null;

ご覧のとおり、存在していてNULLでない場合は、最初のオペランドを返します。それ以外の場合は、2番目のオペランドを返します。

[〜#〜]更新[〜#〜]

PHP 7.4 なので、これを行うことができます:

$new_variable ??= $testing;

issetの場合は値を割り当て、それ以外の場合はNULLを割り当てます。

30
Daan

次のようにNULLに設定するだけです:

_$new_variable = (isset($testing) ? $testing : NULL);
_

You変数は、isset()チェックでfalseを返します。

マニュアルで NULL の詳細を読むことができます。

そしてそこからの引用:

特別なNULL値は、値のない変数を表します。 NULLは、タイプnullの唯一の可能な値です。

次の場合、変数はnullと見なされます。

  • 定数NULLが割り当てられましたです。
  • まだどの値にも設定されていません
  • unset()されています。
8
Rizier123

これを行うこともできます(短い形式):

isset($testing) ? $new_variable = $testing : NULL;
0
Arnaud Anato