それなりブログ

とあるWebエンジニアのそれなりのブログ、JavaScript/Node.js/Python/PHP/ゲーム作成 など

[PHP] requireやinclude周りを復習

PHPのファイルインクルード周りが気になったので復習したという話です。
ブログ更新コストを抑えるために超雑更新モードで!

requireとincludeの違い

読み込み失敗時に処理が止まる = require
読み込み失敗時に処理を継続 = include

もう少し詳しく説明すると
読み込み失敗時に Fatal Error (E_ERROR) を発生 = require
読み込み失敗時に Warning (E_WARNING) を発生 = include

参考) PHPマニュアル – include()

require_onceの同一ファイル判定

説明はいらんと思うので、以下が確認した点

  • 途中のファイルパスの記述方法が異なっても、同じファイルを指していたら、同じファイルと判定(当たり前だけど)
  • ファイル名の違うシンボリックリンクも、同じファイルと判定

後者は知らなかった。Linuxに詳しい人なら当然のことなのかもだけど。

include path

一点だけ↓

「パス (絶対パスあるいは相対パスのいずれでも)
を指定した場合は include_path は無視されます。」

引用) PHPマニュアル – include()

何となく知ってたけど、ちゃんと意識したことは無かったので、
近い将来にハマってた気がする。

__autoload

クラス未定義エラーの直前をフックできる関数が __autoload です。
賢明なる諸君には詳しい説明も要らないと思うので、所感だけ↓

  • 一応 function でもやってみたけど無理
  • 個人的感想としては、使えるし黒魔法にもなりにくいので、割とオススメ
  • 詳しく知りたい人は「PHP __autoload」とかでググるといいんだぜ

以上

「置くだけで使えるよ!」というPHPの長所を活かすためには、
とても大事な点なので復習しました。

2 Responses to “[PHP] requireやinclude周りを復習”

  • Pasela より:

    そのツイートを見た時は忙しかったんで見送ってしまったんだけど、後でソースを覗いてみたところ内部でrealpath()を使っているみたいなので、シンボリックも解決されるし././//./みたいなのも正規化されてから処理に入るみたい。
    __autoload便利すぎて手放せない。
    実際使ってるのはZend_Loaderだけど。

  • kjirou より:

    >realpath()
    超どうも!
    http://jp.php.net/manual/ja/function.realpath.php
    を見たら
    > realpath() は、 入力 path のシンボリックリンクをすべて展開し、
    > 「/./」「/../」「/」などの参照をすべて解決することにより、
    > 正規化した絶対パスを返します。
    で、そもそも、シンボリックリンクも展開してくれるのも知らなかった。
    なるほどなぁ・・・。
    > __autoload
    PHPのマジックメソッドは概ね微妙なため、それと一緒にこれも無視してる人が多くてひとこと書いてみた。
    include path の理解と __autoload で、
    ファイルインクルード周りはまぁまぁスッキリすると思った。
    Zend_Loader は、今度機会があったら使ってみます
    あざーした。


コメントを残す

メールアドレスが公開されることはありません。

Categories

Archives