2012-02-02 5 views
1

私はこれがあなたのほとんどのためにばかげた質問のように見えると確信しています。しかし、私はかなり長い間頭を叩いています。 ASP.NET/C#から来て、私は今、PHPを使用しようとしています。しかし、OOrintation全体が私に苦労しています。オブジェクト指向のPHPでメソッドを呼び出す

<html> 

<head> 
</head> 
<body> 

<?php 

echo "hello<br/>"; 

class clsA 
{ 
    function a_func() 
    { 
     echo "a_func() executed <br/>"; 
    } 
} 

abstract class clsB 
{ 
    protected $A; 

    function clsB() 
    { 
     $A = new clsA(); 
     echo "clsB constructor ended<br/>"; 
    } 
} 


class clsC extends clsB 
{ 

    function try_this() 
    { 
     echo "entered try_this() function <br/>"; 
     $this->A->a_func(); 
    } 
} 

$c = new clsC(); 

$c->try_this(); 

echo "end successfuly<br/>"; 
?> 

</body> 
</html> 

私の簡単な理解するために、このコードは次の行になるはずである:

ハロー

CLSBコンストラクタ

入っtry_thisを終了

私は、次のコードを持っています()関数

a_func()、しかし、それはa_func 'を実行していない

を実行し、私が得るすべてがある:CLSBコンストラクタは

を終了

ハロー

try_this()関数を入力します

誰でも問題を見つけることができますか?

ありがとうございました。

答えて

9

あなたの問題はここにある:

$A = new clsA(); 

をここでは、ローカル変数$Aに新しいclsAオブジェクトを代入しています。何をするものではプロパティ$Aに割り当てた:最初の答えとして

$this->A = new clsA(); 
1

だけでなく、あなたは次のように、クラスにあなたがCでクラスにアクセスすることができ、このように、Bクラスを拡張することができ下記:この場合

<?php 

    echo "hello<br/>"; 

    class clsA{ 
     function a_func(){ 
      echo "a_func() executed <br/>"; 
     } 
    } 

    abstract class clsB extends clsA{ 
     function clsB(){ 
      echo "clsB constructor ended<br/>"; 
     } 
    } 


    class clsC extends clsB{ 
     function try_this(){ 
      echo "entered try_this() function <br/>"; 
     self::a_func(); 
     } 
    } 

    $c = new clsC(); 

    $c->try_this(); 

    echo "end successfuly<br/>"; 
    ?> 
+0

それは彼が何をしたいのかだ場合は、おそらくクラスAが階層構造でBとCとは何の関係もないように、彼 'could'が、誰もが知っている:) – tim

+1

@Alexandrew真が、 –

+0

ええ、それは私が意味するものです。私はそれがそんなに愚かなものと関係しなければならないことを知っていた。出来た。感謝万円。 – dsb

関連する問題