2015-10-27 15 views
5

Có thể chạy phương pháp php về thay đổi tài sản không? Giống như thể hiện trong ví dụ dưới đây:Phương pháp chạy php về thay đổi tài sản

Class:

class MyClass 
{ 
    public MyProperty; 

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

Object:

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

Kết quả:

"MyProperty changed to 1" 
+2

Đặt biến là riêng tư và sử dụng hàm để thay đổi. –

+0

Bạn sẽ phải thực hiện nó. Ví dụ: Thay đổi thuộc tính, kích hoạt sự kiện và nắm bắt sự kiện. – Xlander

Trả lời

4

Giống như @lucas nói, nếu bạn có thể đặt thuộc tính của mình là riêng tư trong lớp, sau đó bạn có thể sử dụng __set() để phát hiện thay đổi.

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

Bạn c đạt được điều này tốt nhất bằng cách sử dụng phương thức setter.

class MyClass 
{ 
    private MyProperty; 

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

} 

Bây giờ bạn chỉ cần gọi setter thay vì tự đặt giá trị.

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

Sử dụng 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'; 

Nó có thể là một ý tưởng tốt hơn và truyền thống hơn để sử dụng một setter old-fashioned tốt thay vì:

class Foo { 

    protected $bar; 

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

} 

$f = new Foo; 
$f->setBar('baz'); 
Các vấn đề liên quan