isset的奇怪行为

pro*_*avi 3 php php-5.3

php 5.3中的isset()似乎表现得出乎意料.我有一个名为DB details的类,它使用getter和setter封装了一堆字符串属性.

$ dbdetails-> getDatabasename()计算为字符串("mydb")

这会引发500错误:

if(!isset($dbdetails->getDatabasename())){
//do something
}
Run Code Online (Sandbox Code Playgroud)

这很好用

$databasename = $dbdetails->getDatabasename();
if(!isset($databasename)){
//do something
}
Run Code Online (Sandbox Code Playgroud)

我无法看到任何日志输出,因为即使将错误ini param设置为(打开),apache也会发送回500.我知道这肯定与isset调用有关.知道什么可能是错的,或者我发现了PHP错误?

soi*_*mon 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
?>
Run Code Online (Sandbox Code Playgroud)