[Zend Framework] Zend_Loader: ファイル・クラスのインポートについて調べる

インポートを行う書き方がたくさんあって分からなかったので調べてみました。

Contents

require(), require_once(), include(), include_once()

require()

  • インポートする(外部ファイルを読み込む)
  • 見つけられない場合、fatal error(エラーで強制停止)

require_once()

  • インポートする(外部ファイルを読み込む)
  • 1回だけ読み込む(既に読み込んでいたらスキップする)
  • 見つけられない場合、fatal error(エラーで強制停止)

include()

  • インポートする(外部ファイルを読み込む)
  • 見つけられない場合、warning(エラーで警告)

include_once()

  • インポートする(外部ファイルを読み込む)
  • 1回だけ読み込む(既に読み込んでいたらスキップする)
  • 見つけられない場合、warning(エラーで警告)

use

PHP 5.3 から対応した名前空間を利用したエイリアス/インポート。

Zend_Loader::loadFile(), loadClass()

Zend_Loader::loadFile()

  • include() のラッパー。
  • 失敗した場合 (たとえば指定したファイルが存在しないなど) には FALSE を返す。

Zend_Loader::loadClass()

  • PHP ファイルを読み込んでクラスが存在するかどうかを確かめる。
  • ファイルが見つからない場合、あるいは読み込んだファイルにクラスが存在しない場合は Zend_Exception をスロー。

Note: Loading Classes from PHP Namespaces
Starting in version 1.10.0, Zend Framework now allows loading classes from PHP namespaces.

vendor/autoloader.php

composerで利用。
PSR-0 に従っているpackageをautoloadできる。

Zend_Loader_Autoloader

昔のコードにある require_once の嵐が今はない理由は、この Zend_Loader_Autoloader のおかげか。
自作のライブラリーもこれで呼べるよう。

補遺

ここを読む限りでは、require_once を追い出して Zend_Loader_Autoloader を使うべきということのようですね。

この場合、composer の autoloader はどう呼ぶのでしょうか。
Zend Framework 自体を composer でインストールすると、このあたりの振る舞いはどうなるのかな。