0

三項演算子if/else構造の質問を熟読しました。通常の状況では、if / else構造よりも三項演算子を使用してもパフォーマンスが低下/向上しないことは理解していますが、これについての言及はありません。状況。PHPに固有の言語(ただし、言語に依存しない詳細は大歓迎です)は、次のような状況でインタープリターが値を再割り当てします。

$foo = 'bar'
$foo = strlen($foo) > 3 ? substr($foo, 0, 3) : $foo;

これは非効率的であると評価されるので$foo = $foo;、またはインタプリタは単にこの評価を見落とし/破棄しますか?

ちなみに、次の点についてはどうでしょうか。

!defined('SECURE') ? exit : null;
4

4 に答える 4

4

あなたの最初の例が非効率的かどうかはわかりませんが、それは確かに無意味です。私はまだifステートメントがより明確だと思います:

$foo = 'bar';

if (strlen($foo) > 3)
    $foo = substr($foo, 0, 3);

そして、以下は機能しますがnull、三項演算子は式/値を評価するために使用されることを意図しているため、最後に配置することは意味がありませんが、ここでnullは解析エラーを防ぐ以外に何もしません。

!defined('SECURE') ? exit : null;

より一般的には、これはブール短絡の例です(少なくとも1つの条件が真であることが判明すると、条件式は自動的に真と評価されるため、が定義されてor exitいない場合は実行されません)。SECUREor

defined('SECURE') or exit;

私が言いたいのは、これです。できるという理由だけで3項条件式を使用しないでください。

于 2011-01-09T20:50:25.657 に答える
0

ここで 3 進数を使用することが最適ではないというトピックは、既に上で説明されています。値を再割り当てするかどうかについての質問に対処します。

これは、「再割り当て」と呼ばれるものに依存します。PHP は最適化しないため、$foo = $fooが評価されます。一方、これによって PHP が値を$foo新しいメモリ チャンクにコピーすることはありません。おそらく、PHP はrefcounton$fooを増やしてからすぐに減らします (ただし、自己割り当ての正確な実装の詳細についてはわかりません)。そのため、PHP がステートメントを実行しても、パフォーマンスには影響しません ($foo = $fooコードに 700 万回書き込むことを選択しない限り)。

于 2011-01-09T21:25:35.940 に答える
0

この場合、BoltClock によって提示されたフォームを使用します。

if (strlen($foo) > 3) {
    $foo = substr($foo, 0, 3);
}

PHP は、この場合に動作するより単純なものを実装していませんが、まだ :/

于 2011-01-09T21:11:31.583 に答える
0

if@BoltClockが言ったように、私の意見では、ステートメントはおそらくより読みやすく、条件への扉も開きますが、else if常に短絡がありelseます。

strlen($foo) > 3 && $foo = substr($foo, 0, 3); 

後者のステートメントは、前者が TRUE と評価された場合にのみ実行されます。

于 2011-01-09T21:38:08.210 に答える