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 の正しい値が表示されます。

これが常に false を返すのはなぜですか?
マジックゲッターメソッドと関係ありますか?変数がのように直接設定されていない
ためですか?iprivate i;

更新:この質問の複製です。魔法の isset メソッドを追加すると修正されました。

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

1 に答える 1

0

これは、クラスの外部から__get存在しないプロパティにアクセスしようとしたときにのみ ter が呼び出されるためです。クラスはそれ自身のプロパティを知っているはずなので、クラス内では自動的には呼び出されません。

于 2013-03-25T19:41:28.483 に答える