0

我目前一直在尝试将我的 PHP 和 HTML 分开。我试图在我的 HTML 文件中只使用内联 PHP。有时我会想检查数组中的变量是否在我之前设置echo

下面是这个问题的一个小测试:

<?
class test
{
    private $args;
    public function __construct($args = array())
    {
        $this->args = $args;
    }
    public function __get($name)
    {
        return $this->args[$name];
    }
    function test_i()
    {
        echo isset($this->i) ? "yes " : "no ";
    }
}

$test = new test(array('i' => 'testing'));

//test i while inside the class using $this (returns no)
$test->test_i();

//test i outside of the class using $test (returns no)
echo isset($test->i) ? "yes " : "no ";

//set i to another variable (returns yes)
$ii = $test->i;
echo isset($ii) ? "yes " : "no ";

//returns testing
echo $test->i;

//prints: no no yes testing
?>

我最终想要在我的 HTML 文件中做的是:

<?=isset($this->var) ? $this->var : ''?>

''每次都会返回。如果我echo $this->var之后直接显示 var 的正确值。

为什么这总是返回假?
它与魔术getter方法有关吗?
是因为i变量没有直接设置private i;吗?

更新:这是这个问题的副本。添加魔法 isset 方法修复了它:

public function __isset($name)
{
    return $this->args[$name];
}
4

1 回答 1

0

这是因为__getter 仅在您尝试从类外部访问不存在的属性时才被调用。在类内部,它不会自动调用,因为您的类应该知道它自己的属性。

于 2013-03-25T19:41:28.483 回答