2013-08-04 2 views
0

변경되는 변수가 추상 클래스에서 선언되고 변경되는 변수가 속한 경우 다른 __set을 실행하면 추상 클래스에서 __set 메소드를 실행하는 방법이 실행됩니까? 추상 클래스를 확장 한 클래스 나는 이것이 틀린 길로 가고 있다는 것을 확신합니다, 어떤 도움이 그것을 높이 평가 될 것입니다.__set을 오버로드하여 클래스 중 하나를 사용합니다.

abstract class abstract_class { 
    protected $protected_var; 

    function __set($name, $value) 
    { 
     echo "abstract __set"; 
    } 
} 

class regular_class extends abstract_class { 
    private $temp; 

    function __set($name, $value) 
    { 
     echo "regular __set"; 
    } 
} 

$class = new regular_class(); 
$class->protected_var = "value"; 

위의 예에서 출력되는 "일반 __set"대신 "abstract __set"을 출력하고 싶습니다. 여기

+0

확장 클래스에서 메소드를 구현하지 않음 – felipsmartins

+0

확장 클래스에 __set을 사용하여 설정하려는 변수가 있거나 그럴 수 없다면 어떻게 될까요? – allejo

+0

원하는 것은 @ JohnSmith가 게시 한 내용입니다. – felipsmartins

답변

2
class Base 
{ 
    protected $a = "a"; 

    public function __set($name, $value) 
    { 
     echo "base"; 
    } 
} 

class Child extends Base 
{ 
    private $b = "b"; 
    public function __set($name, $value) 
    { 
     if (property_exists(get_parent_class(), $name)) 
      parent::__set($name, $value); 
     else 
      echo "child"; 
    } 
} 

$obj = new Child(); 

$obj->a = 1; 
$obj->b = 1; 

는 모든 클래스의 아이를 작성하고 __set를 오버로드 할 때 항상 당신이 그렇지 않으면 제대로

작동하지 않습니다 속성이 부모 클래스에 있는지 확인하기 위해 1을 필요로 기억

솔루션

입니다
+0

동일한 예를 게시하고 싶습니다. :) – felipsmartins

+0

뭔가를 잊었 기 때문에 그것을 바 꾸었습니다 xd – UnknownError1337

+0

이것은 제가 원했던 것입니다. 고마워요! – allejo

관련 문제