2016-11-06 9 views
-1

私のクラス名と同じ名前を自分のクラスに与えると、なぜこのコードは "AA"を出力するのですか?PHPのクラスの関数定義と同じ名前

class A{ 

    public function a() { 
     echo 'A'; 
    } 
} 

$a = new A(); 
$a->a(); // AA 

ありがとうございます!

+1

http://stackoverflow.com/questions/217618/construct-vs-sameasclassname-for-constructor-in- PHP – PeeHaa

+0

http://php.net/manual/en/migration70.deprecated.php – PeeHaa

+1

あなたのPHPをアップデートしてエラー報告を有効にしてください – PeeHaa

答えて

0

これは、各行がa()を呼び出すためです。これは、クラスの後に名前が付けられ、クラスAのコンストラクタ関数として使用されるためです。

通常、コンストラクタとして機能する__construct関数を使用しますが、関数の名前が__constructであるため、クラスの後に名前が付けられた関数が呼び出されます。だから、実際にあなたの出力は次のようになります。

PHPが与えられたクラスの__construct()関数を見つけることができない場合、PHP 3と4との後方互換性のため AA

を出力に蓄積

$a = new A(); // A 
$a->a(); // A 

、およびクラスが親クラスから継承しなかった場合、クラスの名前で古いスタイルのコンストラクタ関数を検索します。

http://php.net/manual/en/language.oop5.decon.php

-1

コンストラクタの呼び出しは、自動的にすぐに宣言して(機能)

+0

StackOverflowへようこそ。ありがとうございました。一般的には、質問に答えるときに、特定の方法がうまくいかない理由を説明し、正しい方法で作成者を助ける代替案を含める必要があります。私は[良い答えを書くにはどうすればいいですか](http://stackoverflow.com/help/how-to-answer)を読むことをお勧めします。 – CmdrSharp

関連する問題