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