3

PHP の assert ステートメントは、他のほとんどの言語とは異なります。

assert('return false');実際に文字列を評価し、その結果 (false) をアサートします。

パラメーターを true と比較する代わりに、引数を調べるという追加の手順を実行し、引数が文字列である場合はそれを評価してから比較を実行します。

本当に奇妙です。

私の問題は、動作を理解することではありません。私の問題は、この動作の正当な理由を考え出すことです。あなたは今、思考の余分な精神的な仕事をしなければならないので... 「それは文字列に評価されますか?」.

4

2 に答える 2

11

文字列アサーションの利点は、アサーション チェックがオフの場合のオーバーヘッドが少なく、アサーションが失敗した場合のアサーション式を含むメッセージです。これは、ブール条件をアサーションとして渡す場合、この条件は assert_options() 関数で定義した可能性のあるアサーション関数のパラメーターとして表示されず、そのハンドラー関数を呼び出す前に条件が文字列に変換され、 boolean FALSE は空の文字列として変換されます。

http://www.php.net/manual/en/function.assert.phpから

于 2009-03-15T18:12:18.193 に答える
1

言語の特定の部分を特別なケースにする必要がなかったので、単純にそうだと思います。PHP では、文字列を式のように扱うと、自動的に評価されると思います。このようにして、関数の名前を渡して「呼び出し」を試みるだけで機能します(ポインターのない関数ポインター:-P)。

編集: assert に関する PHP ドキュメントからの関連する引用については、Jakob の回答も参照してください。

于 2009-03-15T18:04:18.617 に答える