2015-10-27 21 views
5

Özellik değişikliği için php yöntemini çalıştırmak mümkün mü?Özellik değişimi için Php çalıştırma yöntemi

Sınıf:

class MyClass 
{ 
    public MyProperty; 

    function __onchange($this -> MyProperty) 
    { 
     echo "MyProperty changed to " . $this -> MyProperty; 
    }   
} 

Nesne:

$MyObject = new MyClass; 
$MyObject -> MyProperty = 1; 

Sonuç: Aşağıdaki örnekte gösterildiği gibi

"MyProperty changed to 1" 
+2

Değişkenini özel olarak koyun ve değiştirmek için bir işlev kullanın. –

+0

Bunu uygulamak zorundasınız. E.g Mülk değiştir, olayı tetikle ve olayı yakala. – Xlander

cevap

4

söyledi, eğer Mülkünüzü sınıf içinde özel olarak ayarlayabilirsiniz, daha sonra bir değişikliği algılamak için __set() öğesini kullanabilirsiniz.

class MyClass 
{ 
    private $MyProperty; 

    function __set($name, $value) 
    { 
    if(property_exists('MyClass', $name)){ 
     echo "Property". $name . " modified"; 
    } 
    } 

} 


$r = new MyClass; 
$r->MyProperty = 1; //Property MyProperty changed. 
2

Sen c Bir setter yöntemi kullanarak bunu en iyi şekilde gerçekleştirin.

class MyClass 
{ 
    private MyProperty; 

    public function setMyProperty($value) 
    { 
     $this->MyProperty = $value; 
     echo "MyProperty changed to " . $this -> MyProperty; 
    } 

} 

Şimdi değeri kendiniz ayarlamak yerine ayarlayıcıyı çağırmanız yeterlidir.

$MyObject = new MyClass; 
$MyObject -> setMyProperty(1); 
0

kullanma magic method __set:

class Foo { 

    protected $bar; 

    public function __set($name, $value) { 
     echo "$name changed to $value"; 
     $this->$name = $value; 
    } 

} 

$f = new Foo; 
$f->bar = 'baz'; 

yerine iyi bir eski moda ayarlayıcı kullanmak için daha iyi ve daha geleneksel bir fikir olabilir: @lucas gibi

class Foo { 

    protected $bar; 

    public function setBar($value) { 
     echo "bar changed to $value"; 
     $this->bar = $value; 
    } 

} 

$f = new Foo; 
$f->setBar('baz'); 
İlgili konular