support empty/isset with undefined var

pull/18/head
NathanFreeman 1 month ago
parent 1403590a32
commit e7a947800e
  1. 9
      src/CompilerBase.php
  2. 16
      tests/std/core/empty_isset.phpt

@ -3228,8 +3228,15 @@ class CompilerBase implements PropertyAccessContext
protected function parseChainedExpr(NodeAbstract $node, string $op, bool $getValue = false): string
{
$name = $this->parseIdentifier($node);
// 如果empty/isset中的变量不存在,直接返回true/false
if (($op == self::OP_EMPTY || $op == self::OP_ISSET) && $this->isVarExpr($node) && !$this->hasVar($name)) {
return $op == self::OP_EMPTY ? 'true' : 'false';
}
// TypePHP 编译器不允许操作未定义的变量,PHP 的 isset($var) 可能 $var 未定义
$this->checkVarMustExist($node, $this->parseIdentifier($node));
$this->checkVarMustExist($node, $name);
$fn = $this->getChainedFunc($op);
$expr = $node;
if ($this->isVarExpr($expr)) {

@ -0,0 +1,16 @@
--TEST--
empty() / isset() undefined var
--FILE--
<?php
function main() {
var_dump(empty($do));
var_dump(isset($do));
var_dump(!empty($do));
var_dump(!isset($do));
}
?>
--EXPECT--
bool(true)
bool(false)
bool(false)
bool(true)
Loading…
Cancel
Save