isset的奇怪行为

时间:2012-05-17 22:19:35

标签: php php-5.3

php 5.3中的

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错误?

2 个答案:

答案 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())语法无效。