isset(( 似乎表现得出乎意料。我有一个名为 DB details 的类,它封装了一堆带有 getter 和 setter 的字符串属性。
$dbdetails->getDatabasename(( 计算结果为字符串 ("mydb"(
这将引发 500 错误:
if(!isset($dbdetails->getDatabasename())){
//do something
}
这工作正常
$databasename = $dbdetails->getDatabasename();
if(!isset($databasename)){
//do something
}
我无法看到任何日志输出,因为即使错误 ini 参数设置为 (原文如此( 开,apache 也发回了 500。我知道这肯定与isset呼叫有关。知道可能出了什么问题,或者我发现了一个 PHP 错误吗?
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
?>
- PHP: is_null
- PHP: isset
这就是
isset()
的工作方式。与empty()
相同。它们只能使用变量,而不能使用表达式。从文档中:
isset()
仅适用于变量,因为传递其他任何内容都会导致解析错误。要检查是否设置了常量,请使用defined()
函数。
因此,isset(function_call())
是无效的语法。