伊塞特的奇怪行为.PHP 5.3 中的


Strange behavior of isset

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())是无效的语法。