include_once(include) は戻り値が返されるの!?
PHPで処理を書いているときによく利用するのが、include_once ();です。
このinclude_once ではその名の通り一度読み込みを行ったら読み込まないという命令で、
include();とは異なって複数回の読み込みを抑えることができ便利です。
このinclude_once(include)が実は戻り値を返してくれるんですね。
あまり用途はないとは思いますが、
warning を出力しない本番環境などでは利用価値があるかもしれません。
includeとrequireの違い
includeとrequireの違いはファイルが存在するか否かによって挙動が異なっています。
include は、ファイルを見つけられない場合に warning を発行します。一方 require の場合は、同じ場合に fatal error を発行する点が異なります。
ですので、include_once();はファイルがない場合には、
warningが出力されますが、プログラムはそのまま実行されます。
このwarningに関してはPHP.iniの設定によっては出力しないようにしていることもあるでしょう。
実際、運用環境は出力しない方が望ましい。
include、include_onceから戻り値を受け取る
さて、そんな時に本番環境に導入したプログラムが動かずに、
迷ってしまうことがあります。
設定を変えてwarningを出力するようにしてもいいのですが、
本番環境の設定に変更を入れたくない。
そんな時には、以下のように戻る値を利用することができるかと思います。
2行目、5行目にて include();の戻り値を変数に代入しています。
普通はこんな書き方しないよな・・・と思う。
1 2 3 4 5 6 7 8 9 10 |
function chortcode_withinclude_handler($atts, $content=null) { $res1 = include_once 'functions_for_test_inc.php'; $type1 = gettype($res1); $msg1 = '成功:'.$res1.'('.$type1 .')<br />'; $res2 = include_once 'functions_for_test_inc2.php'; $type2 = gettype($res2); $msg2 = '失敗:'.$res2.'('.$type2 .')<br />'; return $msg1.$msg2; } add_shortcode('chortcode_withinclude', 'chortcode_withinclude_handler'); |
※ここではショートコード化してWordPressに実行させています。
WordPressのショートコードについては以下でご紹介しています。
実行結果(一部マスク処理)
Warning: include_once(functions_for_test_inc2.php) [function.include-once]: failed to open stream: No such file or directory in H:\(略)\functions_for_test.php on line 13
Warning: include_once() [function.include]: Failed opening ‘functions_for_test_inc2.php’ for inclusion (include_path=’.;C:\php\pear’) in H:\(略)\functions_for_test.php on line 13
成功:1(boolean)
失敗:(boolean)
正しく読み込みできた場合には「1(True)」が戻り、
ファイル指定が誤っている場合には「 (False)」が戻っています。
さいごに
慎重にプログラムを書くなら、include部分で毎回戻りを受け取っておき、
エラーに飛ばしたり、メッセージを表示したりといった形で、
どこがおかしいのかをヒントにすることもできるように思います。
Warning表示があれば、それだけでも十分解決策にはなるとは思いますが、
意外な書き方が動作したので少し驚きました。
自分がこんな書き方を利用するかは、わかりませんがメモ程度にご紹介します。
メモ
本当はショートコード内で1回だけincludeさせて、
外部ファイルからの出力を変数に格納して、1度だけ出力されるような内容を、
ショートコードで返せないかな・・・と思ったんですけどね。
同じショートコードを複数埋め込んだ時に、
1度だけ出力させたいものがあったもので。
例えば、JavaScriptやCSSの読み込みタグとかなんかも考えられる用途かと。
<link rel=”stylesheet” href=”” type=”text/css” media=”all”>など。
今回はPOST用に、隠しFormを出力したかったんですが、
複数のショートコードから共用するFormだと1つしか必要ないんですよね。
どうやって実現しようかな・・・。
別ショートコードにして、一度埋め込めば済む話ではあるんですが。。。
Apache,Apache Hadoop,Apache Subversion,Hadoop,HDFS,HBase,Hive,Mahout,Pigは、
Apache Software Foundationの米国およびその他の国における登録商標または商標です。
ApacheソフトウェアはApache Software License (原文)および
Apache License, 2.0 (原文)に基づきOpen Source Initiativeに承認されライセンスされています。
PHPはPHP License (原文)に基づいて、
Open Source Initiativeに承認されライセンスされています。
関連記事
-
PHP.iniに設定する設定値はhttpd.confや.htaccessに対しても設定が可能
Google or AdMax Promotion(it) 禁断の機能がau公式 …
-
PHPのechoには省略表記があったのか。
Google or AdMax Promotion(it) 禁断の機能がau公式 …
-
(mod_fcgid on 2.0.x)windowsでCGIをFastCGIで実行するように設定したかった
Google or AdMax Promotion(it) 禁断の機能がau公式 …
-
ローカル環境へのPHP設置(Ver.PHP 5.5.5)
Google or AdMax Promotion(it) 禁断の機能がau公式 …
-
(mod_fcgid on 2.2.x)windowsでCGIをFastCGIで実行するように設定する
Google or AdMax Promotion(it) 禁断の機能がau公式 …
-
PHPの過去バージョンがダウンロードできるアーカイブ先(メモ)
Google or AdMax Promotion(it) 禁断の機能がau公式 …
-
phpinfo.phpに表示されるLocal ValueとMaster Valueの違いとは
Google or AdMax Promotion(it) 禁断の機能がau公式 …
-
PHPをインストール後に[msvcr71.dllがないためプログラムを開始できません]という場合
Google or AdMax Promotion(it) 禁断の機能がau公式 …
-
PHPをmod_fcgidやmod_fastcgiでFastCGI実行する方法
Google or AdMax Promotion(it) 禁断の機能がau公式 …
-
ローカル環境のPHPをCGI実行させる方法をwindowsで試す
Google or AdMax Promotion(it) 禁断の機能がau公式 …