PHP の場合:
require
いつvs.を使用する必要がありますinclude
か?require_once
いつvs.を使用する必要がありますinclude_once
か?
PHP の場合:
require
いつvs.を使用する必要がありますinclude
か?require_once
いつvs.を使用する必要がありますinclude_once
か?もありrequire
ますinclude_once
。
だからあなたの質問は...
require
かinclude
?require_once
。require
1の答えはここに記述されています。
require()関数は、エラーの処理方法が異なることを除いて、include()と同じです。エラーが発生した場合、include()関数は警告を生成しますが、スクリプトは実行を継続します。require()は致命的なエラーを生成し、スクリプトは停止します。
2の答えはここにあります。
require_once()ステートメントはrequire()と同じですが、PHPがファイルがすでにインクルードされているかどうかをチェックし、インクルードされている場合は再度インクルード(必須)しないことを除きます。
使用する
ファイルがアプリケーションで必要とされる場合にrequireします。たとえば、重要なメッセージ テンプレートや、アプリが壊れる構成変数を含むファイルなどです。
次のインクルードでエラーを生成するコンテンツがファイルに含まれている場合、
require_oncefunction important() { /* important code */}
はアプリケーションで確実に必要ですが、関数を再宣言できないため、再度インクルードしないでください。
ファイルが不要な場合はインクルード
し、見つからない場合はアプリケーション フローを続行する必要があります。たとえば
、現在のスコープなどから変数を参照するテンプレートに最適です。
include_once
後続のロード時にエラーを生成するオプションの依存関係、または HTTP オーバーヘッドのために 2 回発生したくないリモート ファイル インクルードが発生する可能性があります。
しかし、基本的には、いつどれを使用するかはあなた次第です。
私の提案は、require_once
99.9% の時間だけ使用することです。
require
orを代わりに使用include
することは、コードが他の場所で再利用できないことを意味します。つまり、プルしているスクリプトが、クラスまたは一部の関数ライブラリ を利用可能にする代わりに、実際にコードを実行することを意味します。
その場で実行するコードを必要とする/含める場合、それは手続き型コードであり、新しいパラダイムを知る必要があります。オブジェクト指向プログラミング、関数ベース プログラミング、または関数型プログラミングのように。
オブジェクト指向または関数型プログラミングを既に行っている場合、include_once
ほとんどの場合、スタック内でバグ/エラーを見つけるのが遅れます。do_cool_stuff()
後で呼び出しに行ったときに関数が使用できないことを知りたいですか、それともライブラリを要求することによって関数が使用可能になると予想される瞬間ですか? 一般に、必要なものや期待するものが利用できない場合はすぐに知ることが最善なので、そのまま使用してrequire_once
ください。
あるいは、最新の OOP では、使用時にクラスを自動ロードするだけです。
_once関数と_once関数なしの違い:_onceなしのコードは再び含まれますが、_once関数を使用すると、PHPは含まれるファイルを追跡し、一度だけ含めます。
requireとincludeの違い:requireファイルが見つからない場合、PHPは致命的なエラーを発行しますが、includeの場合は警告のみが発行されます。
include()
ファイルをインクルードできない場合は警告がスローされますが、残りのスクリプトは実行されます。
require()
E_COMPILE_ERROR
ファイルをインクルードできない場合は、スクリプトをスローして停止します。
および関数は、ファイルが既にインクルードされている場合、そのファイルを再度インクルードしませんinclude_once()
。require_once()
次のドキュメント ページを参照してください。
クラスと関数の定義をファイルにまとめておく必要があります。
依存関係(クラス、関数、定数)require_once()
をロードするために使用します。
テンプレートのようなファイルrequire()
をロードするために使用します。
オプションの依存関係(クラス、関数、定数)include_once()
をロードするために使用します。
オプションのテンプレートのようなファイルinclude()
をロードするために使用します。
require_once()
現在のファイルで呼び出されたファイルが 1 回だけ必要な場合は、ファイルで使用して別のファイルを含めることができます。この例では、test1.php を使用しています。
<?php
echo "today is:".date("Y-m-d");
?>
そして、私がtest2.phpと名付けた別のファイルで
<?php
require_once('test1.php');
require_once('test1.php');
?>
test1 ファイルを 2 回要求する m を見ているため、ファイルには test1 が 1 回含まれ、2 回目の呼び出しでは無視されます。停止せずに、出力を 1 回表示します。
'include_once()` を使用しているときはいつでも、現在のファイルで呼び出されたファイルが複数回必要な場合に、別のファイルを含めるためにファイルで使用できます。この例では、test3.php という名前のファイルがあります。
<?php
echo "today is:".date("Y-m-d");
?>
そして、test4.php という名前の別のファイルで
<?php
include_once('test3.php');
include_once('test3.php');
?>
あなたが見ているように、test3ファイルを含むmにはファイルが1回含まれますが、それ以上の実行は停止します。
再利用可能なPHPテンプレートには「include」を使用します。必要なライブラリには「require」を使用します。
「*_once」は、ファイルが既にロードされているかどうかをチェックするので便利ですが、「require_once」でのみ意味があります。
違いは、コマンドが生成するエラーにあります。を使用require
すると、使用するファイルが本当に必要になるため、ファイルがE_ERROR
見つからない場合はを生成します。
require()
include()
失敗した場合を除いて同じですが、致命的なE_ERROR
レベルのエラーも発生します。
include
失敗した場合にのみエラーを生成しE_WARNING
ますが、これは多かれ少なかれサイレントです。
したがって、残りのコードを機能させるためにファイルが必要であり、スクリプトを失敗させたい場合は、ファイルを使用できません。
の場合*_once()
:
include_once()
スクリプトの特定の実行中に同じファイルが複数回含まれて評価される可能性がある場合に使用される可能性があるため、この場合、関数の再定義、変数値の再割り当てなどの問題を回避するのに役立ちます。
require_once()
もちろん同じことが言えます。
いつ or を使うべきですrequire
かinclude
?
require
とinclude
関数は同じタスクを実行します。つまり、指定されたファイルをインクルードして評価しますが、違いは、require
指定されたファイルの場所が無効な場合、またはエラーが発生した場合に致命的なエラーが発生するのに対してinclude
、警告を生成してコードの実行を続行することです。
したがってrequire
、インクルードしようとしているファイルがシステムの中心であり、残りのコードに大きな影響を与える可能性がある場合にinclude
関数を使用できます。また、インクルードしようとしているファイルが重要度の低いコードを含む単純なファイル。
そして、私の個人的な推奨事項(重要度の低いコードの場合)はrequire
、開発段階にあるコードのどこにでも関数を配置して、コードをデバッグし、後ですべてのrequire
関数をinclude
関数ごとに置き換えてから本番環境に移行することです。バグがあってもエンド ユーザーには影響せず、残りのコードは適切に実行されます...
いつ or を使うべきですrequire_once
かrequire
?
との基本的な違いは、require
ファイルが既に含まれているかどうかをチェックし、既に含まれている場合はファイルを含めませんが、ファイルが既に含まれているかどうかに関係なく、関数はファイルを含めます。require_once
require_once
require
したがって、コードを何require
度も含めたい場合は関数を使用しますが、コードに一度だけコードを含めたい場合は を使用しますrequire_once
。
require では、ファイルが存在する必要があります。存在しない場合、エラーが表示されます。一方、include を使用すると、ファイルが存在しない場合、ページの読み込みが続行されます。
承認などの重要な部分を要求し、その他すべてを含めます。
複数のインクルードは非常に悪い設計であり、絶対に避ける必要があります。したがって、 *_once はあまり重要ではありません。
マニュアルから:
require()
include()
失敗すると致命的なE_COMPILE_ERROR
レベルのエラーが発生することを除いて、 と同じです。つまり、スクリプトを停止しますが、スクリプトの続行を許可するinclude()
警告 ( ) のみを発行します。E_WARNING
_once()
バリアントについても同様です。
include()
ファイルが見つからない場合は警告が生成されますがrequire_once()
、致命的なエラーが生成されます。
別のことは、ファイルが前に含まれている場合です。その後require_once()
、再度含めません。
オートローダーの時代にPSR-0 / PSR-4
、コードでいくつかの関数/クラスを利用できるようにするだけであれば、ステートメントを使用する必要はまったくないかもしれません (もちろん、require_once
ブートストラップ ファイルとinclude
テンプレートでオートローダー自体を使用する必要がある場合は、テンプレート エンジンとして PHP を使用します)。
クラス、関数、または依存関係をロードする必要がある場合は、require関数を使用します。
テンプレート スタイルのファイルをロードする場合は、include関数を使用します。
それでも混乱する場合は、常にrequire_onceを使用してください。
多くの場合、クライアント ライブラリを条件付きでロードするか、使用するかどうかに関係なくロードするかが問題になります。
具体的な例を次に示します。pcjが言ったことを詳しく説明します。
データベースのユーザー名とパスワードを格納する構成ファイル (conf.php) があるとします。
<?php
//my site configuration file
//For Database
$location='localhost';
$dbuser='yourname';
$userpw='yourpassword';
$database='nameofdatabase';
?>
そして、データベースを使用する静的関数を持つクラス:
<?php
class UsedInLoop {
public static function databaseQuery(){
require(/path/to/conf.php); //require_once will not work here
$db = new mysqli($location, $dbuser, $userpw, $database);
//yada yada yada
}
}
?>
そして、その静的関数は、ループ内で繰り返し呼び出されている別の関数内で使用されます。
<?php
require_once('path/to/arbitraryObject.php'); //either will likely be OK at this level
$obj = new arbitraryObject();
foreach($array as $element){
$obj->myFunction();
}
?>
クラスを一度だけ要求/含めることができます。ループのすべての繰り返しでそれを必要とする/含めると、エラーが発生します。ただし、静的関数が呼び出されるたびに conf ファイルを含める必要があります。
<?php
class arbitraryObject {
public function myFunction(){
require_once(/path/to/UsedInLoop.php); //This must be require_once. require() will not work
UsedInLoop::databaseQuery();
}
}
?>
もちろん、関数の外に移動すると、その問題の解決策になる可能性があります。
<?php
require(/path/to/UsedInLoop.php); //now require() is fine
class arbitraryObject {
public function myFunction(){
UsedInLoop::databaseQuery();
}
}
?>
特定の条件でのみ使用される可能性のあるクラスをロードするオーバーヘッドが懸念され、使用されていないときにロードしたくない場合を除きます。
require
include
最初にファイルを解析する必要があるため、よりもオーバーヘッドが大きくなります。で置き換えるrequires
ことincludes
は、多くの場合、優れた最適化手法です。
require と include を使用するだけです。
include_once または require_once を使用する方法を考えるからです。これは、含まれているか必要な PHP ファイルを保存するログ データを探しています。そのため、include や require よりも遅くなります。
if (!defined(php)) {
include 'php';
define(php, 1);
}
このまま使うだけで…