2009-08-06 5 views
4

PHP 클래스에서 변수/함수 상속을 이해할 수있는 사람이 있습니까?PHP 함수 및 변수 상속

부모 클래스에는 모든 하위 클래스에서 사용하는 함수가 있습니다. 그러나 각 하위 클래스는이 함수에서 자체 변수를 사용해야합니다. 자식 클래스의 함수를 정적으로 호출하고 싶습니다. 아래 예제에서는 하위 클래스의 값과 달리 '세계'가 표시됩니다.

누구든지 하위 클래스의 값을 에코하는 함수를 어떻게 얻을 수 있는지 설명 할 수 있습니까? 인터페이스를 사용해야합니까? 이것은 늦은 정적 바인딩 (PHP의 5.3.0 이전 버전 사용으로 인해 사용할 수없는)과 관련이 있습니까?

echo static::$myVar; 

을하지만 그건 당신에게 사용할 수 있기 때문에, 당신의 유일한 (좋은) 옵션은 hello() 기능 하지을하는 것입니다 :

class myParent 
{ 
    static $myVar = 'world'; 
    static function hello() 
    { 
     echo self::$myVar; 
    } 
} 

class myFirstChild extends myParent 
{ 
    static $myVar = 'earth'; 
} 

class mySecondChild extends myParent 
{ 
    static $myVar = 'planet'; 
} 

myFirstChild::hello(); 
mySecondChild::hello(); 
+0

인터페이스 그냥 정의해야하는 함수를 정의하고,이 같은 뭔가를 작동하지 않을 것입니다. 후기 정적 바인딩은 원하는 것입니다.하지만 말했듯이 사용할 수는 없습니다. 이 행동에 정확히 필요한 것이 무엇입니까? 그것을 구현하는 더 좋은 방법이있을 수 있습니다. – rpjohnst

답변

2

네, 그렇게 할 수 없습니다. static $myVar의 선언은 고정되어 있기 때문에 어떤 방식 으로든 상호 작용하지 않습니다. 5.3.0을 가지고 있다면 주위를 둘러 볼 수는 있지만 그렇게 할 수는 없습니다.

제 조언은 비 정적 변수 및 방법을 사용하는 것입니다.

+0

저는 어린이의 정적 함수 안에 'self'의 인스턴스를 생성하기로 결정한 다음 변수를 비 정적으로 저장합니다. –

0

당신이 PHP 5.3을 사용한 경우,이 echo 문이 작동 것 공전.

0

하위 클래스의 함수를 정적으로 호출하고 싶습니다.

이 정말 하루를 마감하기 전에 견과류를 얻을 수 있습니다 문제로 당신을 운전합니다 ^^ (그것은 이미 아마,이 ^^)

내가 defintly 사용하는 것이 좋습니다 것입니다

적은 "static" 가능한 한 속성/메서드를 사용하십시오. 특히 PHP를 사용하여 상속을 사용하려고 할 때 특히 유용합니다. < 5.3

PHP 5.3은 상당히 새롭기 때문에 몇 달 전에 호스팅 서비스에서 사용할 수 없습니다 ...

1

당신은 th처럼 할 수 있습니다. 입니다 :

class myParent 
{ 
    var $myVar = "world"; 
    function hello() 
    { 
     echo $this->myVar."\n";  
    } 
} 

class myFirstChild extends myParent 
{ 
    var $myVar = "earth"; 
} 

class mySecondChild extends myParent 
{ 
    var $myVar = "planet"; 
} 

$first = new myFirstChild(); 
$first->hello(); 

$second = new mySecondChild(); 
$second->hello(); 

이 코드를 인쇄

earth 
planet