2010-08-02 6 views
1

에서 정적 변수에 액세스 나는 다음과 같은 설정이 : 나는 클래스 아이 내 부모 : $ var1에 있지만에서 사용할 수 있도록해야자식 -> 자식 클래스 PHP

<?php 
class core { 
    static $var1; 
} 

class parent extends core { 
    function getStatic() { 
     return parent::$var1; 
    } 
} 

class child extends parent { 
    function getStatic() { 
     // I want to access core static var, how can i do it? 
     //return parent::$var1; 
    } 
} 
?> 

..를이 가능합니까? 내가 놓친 게 있니?

답변

4

그냥 자기로 참조 ... 귀하의 요구에 가장 적합한 것 같다 이제 getStatic을 bar로 선언하지 않으면 문제가 발생합니다.

class foo1 extends core { 
    protected static $var1 = 'bar'; 
    public static function getStatic() { 
     return self::$var1; 
    } 
} 
class bar1 extends foo1 { 
    protected static $var1 = 'baz'; 
} 

지금, 당신은 bar을 반환 foo1::getStatic()을 기대 (그것은 것)의 예를 들어 보자. 하지만 Bar1::getStatic()은 무엇을 반환할까요? bar도 반환합니다. 이를 후기 정적 바인딩이라고합니다. baz을 반환하려면 self::$var1 (PHP 5.3+ 만 해당) 대신 static::$var1을 사용해야합니다.

1

여기서 가장 큰 문제는 class 키워드로 parent 키워드를 사용하고 있다는 것입니다. parent :: $ var1에 대한 호출이 해당 클래스 또는 호출 클래스의 부모를 가리 키도록 의도되었는지 여부를 완전히 모호하게 만듭니다.

나는 이것을 정리하면 원하는 것을 얻을 수 있다고 믿습니다. 이 코드는 'something'을 인쇄합니다. 당신이 core:: 대신 parent::를 사용하는 경우

class core { 
    static $var1 = 'something'; 
} 

class foo extends core { 
    function getStatic() { 
     return parent::$var1; 
    } 
} 

class bar extends foo { 
    function getStatic() { 
     // I want to access core static var, how can i do it? 
     return parent::$var1; 
    } 
} 

$b = new bar(); 
echo $b->getStatic(); 

는 또한 작동합니다. 그 두 당신이 foo 클래스의 내부에 정적 $ var1을 선언하는 경우에도 다르게 동작합니다. 그것은 하나의 상속 된 변수입니다.

+0

실제로 이것을 'bad'라고 부르지는 않습니다. – Lizard

+0

'parent'는 예약어입니다. PHP는 여러분이'parent' 클래스를 호출하도록 허용하지 않습니다. – NullUserException

2

핵심 :: $의 VAR1은 일치

class core { 
    protected static $var1 = 'foo'; 
} 
class foo extends core { 
    public static function getStatic() { 
     return self::$var1; 
    } 
} 
class bar extends foo { 
    public static function getStatic() { 
     return self::$var1; 
    } 
} 

을 찾을 때까지 PHP가 자동으로 상속의 체인을 갈 것입니다 ...

+0

나는 이것을 upvote 줄 알았지 만 남은 표가 없다. – NullUserException

관련 문제