- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:PHPのクラス継承において質問)
PHPのクラス継承において親クラスのメソッドが子クラスに継承されない理由
このQ&Aのポイント
- PHPのクラス継承において、親クラスのメソッドは子クラスに継承されます。
- しかし、親クラスのメソッド内で使用される__CLASS__マジック定数は、そのメソッドが呼び出されたクラスの名前を返します。
- つまり、親クラスのメソッド内で使用される__CLASS__マジック定数は、親クラスの名前であるSuperClassを返すため、子クラスで呼び出された場合でもSuperClassが出力されるのです。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
__FILE__とか__DIR__とかが 処理を実行してるPHPじゃなく includeしたりrequireされたファイルの パスとかディレクトリを返すみたいに __CLASS__とか__TRAIT__ってのは extends したり use されたりした クラスとかトレイトを返すってカンジです includeしたPHPからさらにPHPをincludeしたいとか 読み込まれたPHPのパスを使いたい時があるみたいに 継承元のクラス変数やクラスメソッドを使いたいとか 継承元のクラスを取得したいような時があるもんで そもそもそういうことするための手段として マジック定数があるってカンジです
その他の回答 (1)
- H240S18B73
- ベストアンサー率65% (190/288)
回答No.1
マジック定数ってそういうものです http://php.net/manual/ja/language.constants.predefined.php
お礼
ご教授ありがとうございます。 提示されたPHPマニュアルによると クラス名(PHP4.3.0で追加されました)。 PHP 5以降、この定数は宣言時のクラス名(ケース依存)を返します。 PHP 4では、この値は常に小文字で返されました。 クラス名には、そのクラスが宣言されている名前空間も含みます (例 Foo\Bar)。 PHP 5.4 以降では、__CLASS__ がトレイトでも使えることに注意しましょう。トレイトのメソッド内で __CLASS__ を使うと、そのトレイトを use しているクラスの名前を返します。 とありますが、つまり 本質問の継承したサブクラスが呼び出しているメソッドっていうのは ”この定数は宣言時のクラス名(ケース依存)を返します。” という点から 継承するというよりスーパークラスで定義しているメソッドを借りてきているだけっていうようなイメージでしょうか?