logo

クラス/オブジェクト関数編  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/
本プレスリリースは発表元企業よりご投稿いただいた情報を掲載しております。
お問い合わせにつきましては発表元企業までお願いいたします。