-3

重複の可能性:
PHP__getおよび__setマジックメソッド

OOPから始めます。。とにかく私がそれを正しく理解しているかどうかはわかりませんが$attribute、関数のためにコードがの値を変更しないようにする必要があります__set()か?

<?php
class aclass
{
    protected $attribute; //edited from public to protected
    public function __get ($name)
    {
        return $this->$name;    
    }
    public function __set ($name, $value)
    {
        if($name == "foo")
        {
            $this->$name = $value;
        }
    }
} 
$a = new aclass();
$a->attribute = "bar";
echo $a->attribute;
?>

これを実行すると、エラーメッセージが表示されます。

「致命的なエラー:保護されたプロパティaclass :: $attributeにアクセスできません。..16行目」16行目は「echo$a-> attribute」です-他の投稿では、属性をPROTECTEDに設定する必要がありますが、機能していません。PHP 5.4.3を使用しています-何かアイデアはありますか?

4

2 に答える 2

5

__set()マジックメソッドは、非公開または未定義のプロパティにアクセスしようとしたときにのみ呼び出されますが、プロパティattribute定義済みで公開されているため、直接アクセスされます。

__set()メソッドがへのアクセスを「インターセプト」する場合は、またはattributeを作成する必要があります。protectedprivate

于 2013-01-22T12:02:00.783 に答える
1

__set() 未定義のプロパティに値を割り当てようとすると呼び出されます。あなたの場合、$ attributeはすでにクラスで定義されているため__set、呼び出されません。

于 2013-01-22T12:03:23.230 に答える