2016-07-12 7 views
0

拡張クラスから静的関数(定数付き)を呼び出すことはできません。ここに私のコードです:php - 拡張クラスから静的関数を呼び出す

(1st file) 
class A 
{       
    function isXSet() 
    { 
     return X; 
    }   
    public static function setX() 
    { 
     define('X', 1); 
    } 
} 

(second file) 

include('/*first file*/'); 
class B extends A 
{   
    A::setX();   
} 

どうすればいいですか?

+1

[親の静的メソッドをPHPで呼び出す]の可能な複製(http://stackoverflow.com/questions/18636171/call-parent-static-method-in-php) – FirstOne

+1

どこかから呼び出すとうまくいくはずです。あなたが見てみると、 'A :: setX();はちょうど「飛び回って」(メソッドの中にはない)... – FirstOne

+0

@FirstOne - なぜこの「飛行aroun」ですか?どうすればそれを呼び出すことができますか? – Piter

答えて

1

ここにコードを

class B extends A 
{   
    A::setX();   
} 

は少しオフになっています。あなたはメソッドの中にあなたの呼び出しを入れなかった。

class B extends A 
{ 
    public static function doSomething() {  
     A::setX(); 
    } 
} 

これは実際には親子関係によって何もしていません。実際には、class Aを定義した後、A::setX()への呼び出しは、パブリックで静的なのでどこでも発生する可能性があります。このコードは、同じように有効です。あなたがより多くの可能性を探しているのは何

class A 
{ 
    function isXSet() 
    { 
     return X; 
    } 
    public static function setX() 
    { 
     define('X', 1); 
    } 
} 

class B { // No extending! 
    function isXSet() { 
     return A::isXSet(); 
    } 
} 

ではなくparentです:ここ

class A 
{ 
    public function isXSet() 
    { 
     return X; 
    } 

    protected static function setX() 
    { 
     define('X', 1); 
    } 
} 

class B extends A 
{ 
    public static function doSomething() {  
     parent::setX(); 
     var_dump(parent::isXSet()); // int(1) 
    } 
} 

大きなプラスは、拡張クラスから保護メソッドやプロパティにアクセスすることができるということですparentクラス。つまり、相手がAのインスタンスまたは子でない限り、他の人がA::setX()に電話できないようにすることができます。

+0

私は自分が何をしたいのか分からないと思う - クラスBから定数を設定し、定数Xが設定されていればクラスAをチェックする(どうしたらよいの?)それを行う ? – Piter

関連する問題