Fileクラスで定義されていないメソッドが使える理由

2017年4月12日 at 13:35

concrete5のというより、phpの基本的な質問になってしまうかもしれないんですがすみません。

例えば、画像の横幅を取得したいときに、
$image = File::getByID(hoge);
などして取得したFileオブジェクトに対して
$image->getAttribute("width");
みたいなことをすると思います。

ドキュメントを見ても、FileクラスのメソッドとしてgetAttribute()というものは定義されていません。
(同じ名前空間のVersionクラスには定義されているようなのですが…)

どういう仕組みでこのメソッドが使えるようになっているのでしょうか?
仕組みがわからないまま使うのはモヤモヤするので、詳しい方、ご教授いただけると幸いです。

タグ:

Re: Fileクラスで定義されていないメソッドが使える理由

2017年4月12日 at 15:54
マジックメソッドでファイルバージョンオブジェクトにフォールバックしてるから、ですね。このマジックメソッド、concrete5開発チームは好きなようでよく使われています。

それ以外にも、クラスを継承している場合で親クラスにメソッドが存在する場合もあります。
 

Re: Fileクラスで定義されていないメソッドが使える理由

2017年4月12日 at 16:47
マジックメソッド…!そういうのもあるんですね。
ちょっと複雑で深追いできませんでしたが、__call()メソッドの中でVersionオブジェクトに渡しているということはわかりました。
Versionクラスを継承している様子もなく、どうなっているのかわからなかったので助かりました。
いろいろ調べてみたいと思います。ありがとうございます!