僕とクラフトビール

仕事と本と映画、クラフトビールについて書いてます

PHPの継承で親クラスのメソッドが呼べないことにハマった話

こんにちは。PHPがメインのお仕事の僕です。

久しぶりにフレームワークを使わず開発していた時に詰まったので、忘備録として書いておきます。

1度した失敗は、2回繰り返さないようにー。

 

PHPの継承で親クラスのメソッドが呼べなかった

プログラミングのミスコードにハマって手が止まっているシーン

 

そもそも継承とは?

簡単に説明すると、クラスを継承すると、継承元のクラスのメソッドを継承先のクラスでも使えるようになることです!

 

例えば、似たような処理や、全く同じ処理をする時にクラスを継承していれば、コードを書く手間が省けますし、メソッドの機能を拡張する時に便利です。

 

オブジェクトの継承

プログラミング言語の原則としてよくみられるものに継承があります。 PHP はオブジェクトモデルにおいてこの継承を利用しています。 多くのクラスとオブジェクトとの連携に継承は関係しています。

引用:Manual - PHP

 

今回は、親クラスのメソッドを使おうと、

parent::hoge();

のように呼び出してみたら、呼べないよってエラーが出ました。

 

親クラスを require か include しておく必要がある

次のようなエラーが出ます。

Fatal error: Class 'ParentClass' not found in .....

 

親クラスを、extends の後に書くだけではファイルまで読みに行ってないのです。

あらかじめ継承する親クラスもファイルに読み込んでおく必要があります。

 

require か include で先にファイルのパスを設定して読み込みます。

今回の場合は、require を使って修正しました。

 

ここでは詳しく話しませんが、画面側の機能でない限りは require を使うことを優先します。

 

public と private と protected の差

さて、その後でも少しハマったのが、アクセス修飾子です。

子クラスから親クラスのメソッドを呼び出す時に、public と protected だけ呼べるようになってます。

 

private が付いていると、呼びたくても呼べません。。

このメソッドは今後の機能追加の時に使いそうだな!と思うものは、protected で記述しておくと手間が省けますよ。

 

さいごに

今回は、継承の話でした。

詰まることもない簡単な部分でしたね!

 

こういうエラーが起きた時は、PHPのマニュアルから調べていくことを推奨します。(初心者の方は特に!)

個人ブログや、企業ブログが出てくることありますが、たまにミスしているものも出てきます(笑)

 

システム作ってる時って案外簡単なエラーでハマってること多いですよね。

ずっと集中してやってると、気付かないことが多くなるので、定期的に小休憩入れてます。