はじめに
5つのソースコード(Q01~05)が、○(正常終了)か× (エラー)か答えてください。回答はページ末尾にあります。なお、動作確認したPHPのバージョンは7.2.17です。
※base.phpは共通して下記のソースになります。
base.php
<?php
class base{}
それでは、問題です。
Q.01
q01.php
<?php
new hoge();
class hoge extends base{}
class base{}
Q.02
q02.php
<?php
new hoge();
class base{}
class hoge extends base{}
Q.03
q03.php
<?php
new hoge();
require("base.php");
class hoge extends base{}
Q.04
q04.php
<?php
require("base.php");
new hoge();
class hoge extends base{}
Q.05
q05.php
require("base.php");
class hoge extends base{}
new hoge();
(回答の前に)結論
「ロード(includeやrequire) → 親クラス定義、子クラス定義(extendsやtrait) → インスタンス化 」という順番を守っていれば何の問題にはなりません。とある理由でバラしていたところ当たり前なことがよく分からなくなりました。私と同じように「わけが解らなくなる人」がいるのではないかと思いクイズにしてみました。
みなさんは、一瞬で答えられたでしょうか?
回答
- × エラー
- ○ 正常終了
- × エラー
- × エラー
- ○ 正常終了