3

PHP 5.3 の isset() が予期しない動作をしているようです。一連の文字列プロパティをゲッターとセッターでカプセル化する DB details というクラスがあります。

$dbdetails->getDatabasename() は文字列 ("mydb") に評価されます

これにより、500 エラーがスローされます。

if(!isset($dbdetails->getDatabasename())){
//do something
}

これはうまくいきます

$databasename = $dbdetails->getDatabasename();
if(!isset($databasename)){
//do something
}

エラー ini パラメータがオンに設定されているにもかかわらず、Apache が 500 を返したため、ログ出力を確認できませんでした。これは確かに isset 呼び出しと関係があることを知っています。何が間違っているのか、または PHP のバグを見つけましたか?

4

2 に答える 2

7

このisset関数は、変数が設定されているかどうかをチェックします。$databasename設定できる変数であるため、チェックは有効です。関数に対するチェックは、単純に変数ではないため、無効です。

is_null( $value )関数の即時結果を確認するときに使用することをお勧めします。


is_nullドキュメントのコメントの例:

<?php
function test( ) { return null; }
var_dump( is_null( test( ) ) ); // displays "true"
var_dump( isset( test( ) ) ); // parse error, because "test()" is not a variable
?>
于 2012-05-17T22:22:07.710 に答える
4

それがどのように機能するかisset()です。と同じempty()。式ではなく、変数でのみ機能します。ドキュメントから:

isset()他のものを渡すと解析エラーが発生するため、変数でのみ機能します。定数が設定されているかどうかを確認するには、defined()関数を使用します。

したがって、isset(function_call())無効な構文です。

于 2012-05-17T22:21:58.500 に答える