2016-05-06 3 views
1

数週間前にPHPを学びましたが、今ではPHPの多型について少し知りたいと思います。私はこのような何かで立ち往生:PHPの多態性

class A{ 
    var $n = 0; 
    public function f1(){ 
     $this->n += 4; 
     $m = f2(); 
     return $this->n + $this->m; 
    } 
    public function f2(){ 
     $this->n += 1; 
     return $this->n; 
    } 
    public function f3(){ 
     f1(); 
     return $this->n; 
    } 

    class B extends A{ 
     public function f1(){ 
      $this->n -= 4; 
      $m = f2(); 
      return $this->n - $this->m; 
     } 
     public function f2(){ 
      $this->n += $this->n; 
      return $this->n; 
     } 
    } 

    $b = new B(); 
    $b->n = 4; 
    echo $b->f1()." "; 
    echo $b->f2()." "; 
    echo $b->f3()." "; 

それはエラーがあります。

Fatal error: Call to undefined function f2()

しかし、関数f2は()ライン$m = f2();上で言及されています。

このケースで何が問題になっていますか? ご協力いただきありがとうございます!

+0

f2関数を '$ m = $ this-> f2();' – Pierre

+0

で呼び出そうとしていますSidenote: '$ this-> n + $ this-> m;'と 'return $ this - > n - $ this-> m; '、クラスAもクラスBもインスタンス変数mを持たず、 –

答えて

1

問題は、あなたがまた、メソッドを呼び出しますどのparent::f2();を試してみてください、あなたのクラスBの親メソッドを呼び出したい場合は、あなたがそれを使用するべき方法は、このよう$this->f2();

あるグローバル関数f2を持っていけないですf2()

私はそれが役に立ちそうです。