web-dev-qa-db-ja.com

Require、include、require_once、include_onceの違いは?

PHPの場合:

  • requireincludeはいつ使用すべきですか?
  • require_onceinclude_onceはいつ使用すべきですか?
1095
Scott B

requireinclude_onceもあります。

だからあなたの質問はなるはずです...

  1. requireincludeはいつ使用すべきですか?
  2. いつrequire_oncerequireを使うべきですか

1に対する答えは ここに と記述されています。

Require()関数はinclude()と同じですが、エラーの処理方法が異なります。エラーが発生した場合、include()関数は警告を生成しますが、スクリプトは実行を続けます。 require()は致命的エラーを起こし、スクリプトは停止します。

2への答えは見つけることができます ここ

Require_once()文はrequire()と同じですが、PHPはファイルが既にインクルードされているかどうかをチェックします。

1302
Leo

つかいます

  • 必須
    ファイルがアプリケーションによって 必須 の場合、例:重要なメッセージテンプレート、またはアプリケーションが壊れることのない設定変数を含むファイル。

  • require_once
    ファイルに後続のインクルード時にエラーが発生するコンテンツが含まれている場合あなたのアプリケーションにはfunction important() { /* important code */}が絶対に必要ですが、関数を再宣言することはできないので、再び含めるべきではありません。

  • include ファイルが必要ではなく、見つからなかった場合でもアプリケーションフローを継続する必要がある場合。
    現在のスコープまたは何かからの変数を参照するテンプレートに最適

  • include_once
    HTTPオーバーヘッドのために2回は実行したくない、後続のロードまたはリモートファイルの取り込み時にエラーを発生させる可能性があるオプションの依存関係

しかし、基本的に、いつ使うかはあなた次第です。

364
Gordon

私の提案は、99.9%の時間でrequire_onceを使用することです。

代わりにrequireまたはincludeを使用すると、コードが他の場所で再利用できないこと、つまり、実際に引き込むスクリプトがexecuteクラスまたは一部の関数ライブラリをavailableにする代わりにコード。

その場で実行するコードが必要/含まれている場合、それは手続き型コードであり、新しいパラダイムを知るために取得する必要があります。オブジェクト指向プログラミング、関数ベースのプログラミング、または関数型プログラミングと同様。

既にOOまたは関数型プログラミングを行っている場合、include_onceを使用することは、ほとんどの場合delayingになります。 。関数do_cool_stuff()が後で呼び出されるときに使用できないこと、または使用可能になると予想される瞬間ライブラリが必要ですか?一般的に、必要なものや期待できるものが利用できない場合はすぐに知るのが最善なので、require_onceを使用します。

あるいは、最新のOOPでは、使用時のクラスは autoload だけです。

292
Kzqai

_once関数と_once関数がない場合の違い:_once関数がない場合 PHP は含まれるファイルを追跡し、1回だけ含めるようになります。

Requireとincludeの違い:必要なファイルが見つからなかった場合 PHP 致命的なエラーが発生しますが、includeの場合は警告のみが発生します。

33
Sebastian

ファイルをインクルードできない場合、include()は警告を出しますが、残りのスクリプトは実行されます。

require()E_COMPILE_ERRORを投げ、ファイルをインクルードできない場合はスクリプトを停止します。

include_once()関数とrequire_once()関数は、ファイルが既にインクルードされている場合、2回目はそのファイルをインクルードしません。

次のドキュメントページを参照してください。

28
Polynomial

現在のファイルで呼び出されたファイルが1回だけ必要な場合は、require_once()を使用して別のファイルを含めることができます。ここの例では、私はtest1.phpを持っています。

<?php  
echo "today is:".date("Y-m-d");  
?>  

そして私がtest2.phpという名前の別のファイルに

<?php  
require_once('test1.php');  
require_once('test1.php');  
?>

mはtest1ファイルが2回必要ですが、ファイルにはtest1が1回含まれているので、2回目の呼び出しでは無視されます。そして停止せずに一度だけ出力を表示します。

現在のファイルで呼ばれたファイルが複数回必要なときは、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回だけインクルードされますが、それ以降の実行は停止されます。

21
AliMohsin

再利用可能な _ php _ テンプレートには "include"を使用してください。必要なライブラリには "require"を使用してください。

"* _once"はファイルが既にロードされているかどうかをチェックするのでNiceです。しかしそれは "require_once"でしか意味がありません。

18
mo.

違いは、コマンドが生成するエラーです。 requireでは、使用したいファイルが本当に必要であるため、見つからない場合はE_ERRORを生成します。

require()は、失敗すると致命的なE_ERRORレベルのエラーも生成することを除けば、include()と同じです。

includeは失敗した場合にのみE_WARNINGエラーを生成します。

そのため、残りのコードを機能させるためにファイルが必要であり、スクリプトが失敗してファイルが利用できないようにする必要がある場合に使用します。


*_once()の場合:

スクリプトの特定の実行中に同じファイルが複数回インクルードされ評価される可能性がある場合は、include_once()を使用できます。そのため、この場合、関数の再定義、変数値の再割り当てなどの問題を回避できます。

もちろんrequire_once()についても同様です。


参照: require()include_once()

15
Felix Kling

2018年の7年後の答え

この質問は7年前に尋ねられたものであり、質問に対する実用的な助けとなる回答はありません。最新のPHPプログラミングでは、主にrequired_onceを使用してオートローダークラス(多くの場合、コンポーザーオートローダー)をインクルードし、すべてのクラスと関数をロードします(関数ファイルを明示的に追加する必要があります) composer.jsonファイルに変更して、他のすべてのファイルで使用できるようにします)。何らかの理由でクラスがオートローダーからロードできない場合は、require_onceを使用してロードします。

最近では、PHPファイルの大きなチャンクを分割するためにのみrequireを使用しています。これは主に大きな配列定義です。そのような場合は、require_onceではなくrequireのみを使用します。

 <?php
// arr.php
return ['x'=>'y'];

 <?php
//main.php
$arr= require 'arry.php'

使用するファイルに実行可能ファイルが含まれているか、いくつかの変数が宣言されている場合、ほとんどの場合、requireを使用する必要があります。別の場所でrequire_onceを使用すると、コードが実行されず、変数は黙って開始されないため、特定が非常に難しいバグが発生します。

includeinclude_onceの実際の使用例はありません。

15
PHPst

クラスと関数の定義はファイルにまとめておくべきです。

依存関係 (クラス、関数、定数)をロードするにはrequire_once()を使用してください。

テンプレートライクファイル をロードするにはrequire()を使用してください。

オプションの依存関係 (クラス、関数、定数)をロードするにはinclude_once()を使用してください。

オプションのテンプレート風ファイル をロードするにはinclude()を使用してください。

11

Requireがファイルが存在しなければならない場合、存在しなければエラーが表示されます。一方include - を使用すると、ファイルが存在しない場合はページの読み込みが続行されます。

9
Brian

承認などの重要な部分を必要とし、その他すべてを含みます。

複数インクルードは非常に悪い設計であり、まったく避けなければなりません。したがって、* _onceは実際には関係ありません。

8

含める / 必須 同じファイルを複数回含めることもできます。

require()は、失敗すると致命的なE_COMPILE_ERRORレベルエラーも生成することを除けば、include()と同じです。言い換えれば、include()はスクリプトの続行を許可する警告(E_WARNING)のみを発行するのに対し、スクリプトは停止します。

require_once / include_once

PHPは、ファイルが既にインクルードされているかどうかをチェックし、含まれている場合は再度インクルード(要求)しないこと以外はinclude/requireと同じです。

7
Marcx

include()はファイルが見つからないときに警告を生成しますが、require_once()は致命的なエラーを生成します。

もう1つのことは、ファイルが以前にインクルードされている場合です。それからrequire_once()はそれを二度と含みません。

5
Rukmi Patel

PSR-0 / PSR-4オートローダの時代には、必要なのがあなたのコードでいくつかの関数/クラスを利用可能にすることだけであれば、ステートメントを使う必要は全くないかもしれません(もちろんrequire_onceする必要があります)テンプレートエンジンとしてPHPを使用している場合は、ブートストラップファイルとincludeテンプレートにオートローダ自体を追加します。

4
mp31415

私は以下の機能を使用していました:

function doSomething() {
    require_once(xyz.php);
    ....
}

Xyz.phpで宣言された定数値がありました。

このdoSomething()関数を別のPHPスクリプトファイルから呼び出す必要があります。

しかし、ループ内でこの関数を呼び出しているときに動作を観察しました。最初の繰り返しdoSomething()はxyz.php内で定数値を取得していましたが、後で繰り返しdoSomething()xyz.phpで宣言された定数値を取得できませんでした。

require_once()からinclude()に切り替えることで問題を解決しました。更新されたdoSomething()コードは次のとおりです。

function doSomething() {
    include(xyz.php);
    ....
}

これで、doSomething()へのすべての繰り返し呼び出しは、xyz.phpで定義された定数値を取得します。

4
pcj

マニュアルから

require()は、失敗すると致命的なE_COMPILE_ERRORレベルのエラーも生成することを除けば、include()と同じです。つまり、include()はスクリプトの続行を許可する警告(E_WARNING)のみを発行するのに対し、スクリプトは停止します。

_once()の変種についても同じことが言えます。

4
Ferdinand Beyer

  1. いつrequireまたはincludeを使用する必要がありますか?

    requireおよびinclude関数は同じタスクを実行します。つまり、指定されたファイルをインクルードおよび評価しますが、指定されたファイルの場所が無効またはエラーの場合、requireは致命的なエラーを引き起こしますが、includeは警告を生成し、コード実行を続行します。

    したがって、インクルードしようとしているファイルがシステムの中心部である場合にrequire関数を使用でき、残りのコードに大きな影響を与える可能性があり、include関数を使用できるのは含めようとしているファイルは、重要度の低いコードを含む単純なファイルです。

    私の個人的な推奨事項(それほど重要でないコードの場合)は、開発段階にあるコードのあらゆる場所でrequire関数を使用して、コードをデバッグし、後ですべてのrequire関数をinclude関数に置き換えてから実稼働に移行することですバグを見逃しても、エンドユーザーには影響せず、残りのコードは適切に実行されます...

  2. いつrequire_onceまたはrequireを使用する必要がありますか?

    requirerequire_onceの基本的な違いは、require_onceは、ファイルが既に含まれているかどうかをチェックし、既に含まれている場合はファイルを含めないのに対し、require関数はファイルを含めますファイルがすでに含まれているかどうか。

    そのため、コードの一部を繰り返し含める場合はrequire関数を使用しますが、コードにコードを1回だけ含めたい場合はrequire_onceを使用します。

3
Akshay Khale
  1. クラス、関数、または依存関係をロードする必要がある場合は、 require functionを使用します。

  2. テンプレートスタイルのファイルをロードしたい場合は include functionを使用します。

まだ混乱している場合は、 require_once を常に使用してください。

2
James Wong

それらはすべてファイルをインクルードする方法です。

必要というのはそれが必要だということです。 Require_onceはそれがそれを必要とすることを意味しますが一度だけそれを要求します。インクルードはファイルをインクルードすることを意味しますが、続行する必要はありません。

例:

Require 'filename'
Require_once 'filename'
Include 'filename'

ファイルを1回インクルードするinclude_once関数もあります。

Include_once 'filename'

携帯電話から入力するときに、大文字を使用しないでください。

気付いたことの1つは、includeを使用するとき、それをインクルードしたファイルからインクルードファイル関数にしかアクセスできないことです。 require_onceを使えば、2番目のrequired_onceファイルでその関数を実行できます。

も:追加をお勧めします

if(file_exists($RequiredFile)){
    require_once($RequiredFile);
}else{
  die('Error: File Does Not Exist');
}

Require_onceがページを殺したとき、それは時々あなたのウェブサイトファイルのディレクトリをエコーすることができるので

0
SwiftNinjaPro

基本的に、間違ったパスが必要な場合、PHPは致命的エラーをスローし、shutdown関数が呼び出されますが、誤ったパスを含めるとPHPは実行を継続しますが、ファイルが存在しないという警告を表示します。

英語の単語から require 、PHPは、ページまたはファイルの実行が必要なファイルに依存することを伝えています。

私の経験からすると、構成ファイル、データベースクラス、その他の重要なユーティリティなどの重要なファイルが必要になるのが普通です。

0