PHP/include

PHP/include

include とか include_once とか require とか require_once とかの外の PHP ファイルを引っ張って解釈する系の処理。

この処理は仕様がかなり豪快になっており記述次第でいろいろな効果がある。 普通のコーディングではあまり意識して使うことは無いが自分でちょっとしたフレームワークを作るとなると使うことになるだろう。

基本的な動作

基本的にファイル外のPHPファイルを読み込むために使う。 使いたい関数の定義が hoge.php にあるから piyo.php の頭で require_once するという具合だ。

このように書く

include("hogehoge.php");

動作は豪快で、include したファイルの中に記述されているコードが include を実行した位置にそのまま展開されてそのまま実行されるような動作をする。

include, include_once, require, require_once の違い

基本的には

  • include 何度でも読み込む、対象が存在しなくても止まらない
  • include_once プログラムの実行で対象を1度しか読み込まない、対象が存在しなくても止まらない
  • require 何度でも読み込む、対象が存在しなければエラーで止まる
  • require_once プログラムの実行で対象を1度しか読み込まない、対象が存在しなければエラーで止まる

ほとんどの場合において存在する定義済みライブラリを読み込むという用途で使われるので require_once だけで問題ないだろう。

include を使ってファイル全体を関数のように使う

include 関数には戻り値があって、それは include されるファイルのグローバル部分で記述された return の値になる。

なので ファイル hoge.php にこのように記述

<?php
return "hoge";

ファイル piyo.php にこのように記述すると値が取れる

echo include("hoge.php"); #=> "hoge"

include のスコープ

実行した位置にそのまま展開されてそのまま実行されるような動作

なので include したファイル中の PHP コードと include されたファイル中の PHP コードは地続きになっていて、相互にアクセスが可能になる。

つまり名前さえ一致させておけば、include されるコードにパラメータを渡したりだとか、そのコード中で行った結果を include した側で取り出すことができる。 かなりキモいのだがそういうことができる。

これを使うと突如変数が出現したり、中身が切り替わったりするので、本当に必要な時、構造の安全性よりも記述の簡素化を狙うこと以外では使わないほうがよい。 逆にトラブルがあるならこれを疑ってもよい。

php/function/include.txt · 最終更新: 2019-12-24 17:13 by ore