現在、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 を返すのはなぜですか?
マジックゲッターメソッドと関係ありますか?変数がのように直接設定されていない
ためですか?i
private i;
更新:この質問の複製です。魔法の isset メソッドを追加すると修正されました。
public function __isset($name)
{
return $this->args[$name];
}