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 参数设置(原文如此)为 On,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 回答