クラス/オブジェクト関数編 is_a()関数 とis_subclass_of() 関数で注意すべきポイント
- 編集部の見解や意向と異なる内容の場合があります
- 編集部は内容について正確性を保証できません
- 画像が表示されない場合、編集部では対応できません
- 内容の追加・修正も編集部では対応できません
ヒューマンリソシア株式会社はコラム「クラス/オブジェクト関数編 is_a()関数 とis_subclass_of() 関数で注意すべきポイント」を公開しました。
さて前回の続きです。
PHPマニュアルのis_a()関数の変更履歴をみると、ちょっと気になる事が書いてあります。
端的に要約しますと「一端、5.0.0で非推奨となり、その後5.3.0で非推奨ではなくなった」という経緯が見て取れます。
解除されたとはいえ、一端「非推奨になる」というのはそれなりに理由があるわけなのですが、
果たして何があったのでしょうか?
正確なところは、Zend社にインタビューなりをして…という流れになると思うのですが。
ここで1つ、気になり、かつ重要なところで「CVE-2011-3379」の脆弱性があります。
autoloadのお話を詳しく、はまたいずれ行いますが、まずここで簡単におさらいをしながら、
どんな脆弱性であるか、を確認していきましょう。
autoload(クラスのオートローディング)の機能は、物凄く簡単に書きますと「各スクリプト(プログラム)の先頭でincludeやrequireを書かなくても、未定義のクラス/インターフェイスを使用しようとした時に 自動的にファイルをincludeしたりrequireしたりしてくれる機能」となります。
__autoload() 関数や spl_autoload_register() 関数によって、独自の処理を定義することも可能です。
実際の所、昨今の「実務で用いられる程度に」複雑なプログラムでは、多くのクラス(ファイル)を必要とします。
そのために、結構大量のrequireを書く必要があることも多く、これが結構な作業上の圧迫となります。
また「なにをrequireしてなにをreqireしていないか」を考えるのが面倒で「全てのファイルをreqireする」といった無駄Tips(大変残念なことに、現存します)が生まれたりする事も少なくないのが現状です。
それ以外にも「autoloadとrequire_onceとの性能比較」で、多くの場合に「autoloadが性能がよい」というのもまた、見逃せないポイントです。
この続きは以下をご覧ください
http://resocia.jp/column/740/
ソーシャルもやってます!