1361

PHP の場合:

  • requireいつvs.を使用する必要がありますincludeか?
  • require_onceいつvs.を使用する必要がありますinclude_onceか?
4

26 に答える 26

1573

もありrequireますinclude_once

だからあなたの質問は...

  1. いつ使用する必要がありますrequireinclude
  2. いつ使用する必要がありますかrequire_oncerequire

1の答えはここに記述されています。

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

2の答えはここにあります。

require_once()ステートメントはrequire()と同じですが、PHPがファイルがすでにインクルードされているかどうかをチェックし、インクルードされている場合は再度インクルード(必須)しないことを除きます。

于 2010-03-10T16:17:52.327 に答える
438

使用する


  • ファイルがアプリケーションで必要とされる場合にrequireします。たとえば、重要なメッセージ テンプレートや、アプリが壊れる構成変数を含むファイルなどです。


  • 次のインクルードでエラーを生成するコンテンツがファイルに含まれている場合、 require_oncefunction important() { /* important code */}はアプリケーションで確実に必要ですが、関数を再宣言できないため、再度インクルードしないでください。

  • ファイルが不要な場合はインクルード
    し、見つからない場合はアプリケーション フローを続行する必要があります。たとえば 、現在のスコープなどから変数を参照するテンプレートに最適です。

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

しかし、基本的には、いつどれを使用するかはあなた次第です。

于 2010-03-10T16:25:59.543 に答える
316

私の提案は、require_once99.9% の時間だけ使用することです。

requireorを代わりに使用includeすることは、コードが他の場所で再利用できないことを意味します。つまり、プルしているスクリプトが、クラスまたは一部の関数ライブラリ を利用可能にする代わりに、実際にコードを実行することを意味します。

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

オブジェクト指向または関数型プログラミングを既に行っている場合、include_onceほとんどの場合、スタック内でバグ/エラーを見つけるのが遅れます。do_cool_stuff()後で呼び出しに行ったときに関数が使用できないことを知りたいですか、それともライブラリを要求することによって関数が使用可能になると予想される瞬間ですか? 一般に、必要なものや期待するものが利用できない場合はすぐに知ることが最善なので、そのまま使用してrequire_onceください。

あるいは、最新の OOP では、使用時にクラスを自動ロードするだけです。

于 2010-03-10T16:46:47.930 に答える
42

_once関数と_once関数なしの違い:_onceなしのコードは再び含まれますが、_once関数を使用すると、PHPは含まれるファイルを追跡し、一度だけ含めます。

requireとincludeの違い:requireファイルが見つからない場合、PHPは致命的なエラーを発行しますが、includeの場合は警告のみが発行されます。

于 2010-03-10T16:18:14.740 に答える
37

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

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

および関数は、ファイルが既にインクルードされている場合、そのファイルを再度インクルードしませんinclude_once()require_once()

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

于 2011-11-03T11:48:14.713 に答える
26

クラスと関数の定義をファイルにまとめておく必要があります。

依存関係(クラス、関数、定数)require_once()をロードするために使用します。

テンプレートのようなファイルrequire()をロードするために使用します。

オプションの依存関係(クラス、関数、定数)include_once()をロードするために使用します。

オプションのテンプレートのようなファイルinclude()をロードするために使用します。

于 2012-06-02T09:20:26.823 に答える
26

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回含まれますが、それ以上の実行は停止します。

于 2012-09-29T09:42:35.263 に答える
21

再利用可能なPHPテンプレートには「include」を使用します。必要なライブラリには「require」を使用します。

「*_once」は、ファイルが既にロードされているかどうかをチェックするので便利ですが、「require_once」でのみ意味があります。

于 2010-03-10T17:08:38.950 に答える
16

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

require()include() 失敗した場合を除いて同じですが、致命的なE_ERROR レベルのエラーも発生します。

include失敗した場合にのみエラーを生成しE_WARNINGますが、これは多かれ少なかれサイレントです。

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


の場合*_once()

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

require_once()もちろん同じことが言えます。


参照:require()include_once()

于 2010-03-10T16:20:32.290 に答える
10

 

  1. いつ or を使うべきですrequireinclude?

    requireinclude関数は同じタスクを実行します。つまり、指定されたファイルをインクルードして評価しますが、違いは、require指定されたファイルの場所が無効な場合、またはエラーが発生した場合に致命的なエラーが発生するのに対してinclude、警告を生成してコードの実行を続行することです。

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

    そして、私の個人的な推奨事項(重要度の低いコードの場合)はrequire、開発段階にあるコードのどこにでも関数を配置して、コードをデバッグし、後ですべてのrequire関数をinclude関数ごとに置き換えてから本番環境に移行することです。バグがあってもエンド ユーザーには影響せず、残りのコードは適切に実行されます...

  2. いつ or を使うべきですrequire_oncerequire?

    との基本的な違いは、requireファイルが既に含まれているかどうかをチェックし、既に含まれている場合はファイルを含めませんが、ファイルが既に含まれているかどうかに関係なく、関数はファイルを含めます。require_oncerequire_oncerequire

    したがって、コードを何require度も含めたい場合は関数を使用しますが、コードに一度だけコードを含めたい場合は を使用しますrequire_once

于 2015-07-30T06:05:36.457 に答える
9

require では、ファイルが存在する必要があります。存在しない場合、エラーが表示されます。一方、include を使用すると、ファイルが存在しない場合、ページの読み込みが続行されます。

于 2010-03-10T16:24:59.910 に答える
8

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

複数のインクルードは非常に悪い設計であり、絶対に避ける必要があります。したがって、 *_once はあまり重要ではありません。

于 2010-03-10T17:04:30.680 に答える
7

Include / Require同じファイルを複数回含めることもできます:

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

require_once / include_once

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

于 2011-11-03T11:48:24.477 に答える
5

マニュアルから:

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

_once()バリアントについても同様です。

于 2011-11-03T11:46:19.680 に答える
5

include()ファイルが見つからない場合は警告が生成されますがrequire_once()、致命的なエラーが生成されます。

別のことは、ファイルが前に含まれている場合です。その後require_once()、再度含めません。

于 2011-11-03T11:48:37.650 に答える
4

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

于 2015-10-25T15:39:26.740 に答える
2
  1. クラス、関数、または依存関係をロードする必要がある場合は、require関数を使用します。

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

それでも混乱する場合は、常にrequire_onceを使用してください。

于 2015-07-07T04:13:21.810 に答える
0

多くの場合、クライアント ライブラリを条件付きでロードするか、使用するかどうかに関係なくロードするかが問題になります。

具体的な例を次に示します。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();
    }
}
?>

特定の条件でのみ使用される可能性のあるクラスをロードするオーバーヘッドが懸念され、使用されていないときにロードしたくない場合を除きます。

于 2020-05-12T18:41:52.967 に答える
-1

requireinclude最初にファイルを解析する必要があるため、よりもオーバーヘッドが大きくなります。で置き換えるrequiresことincludesは、多くの場合、優れた最適化手法です。

于 2012-11-14T19:52:54.010 に答える
-2

require と include を使用するだけです。

include_once または require_once を使用する方法を考えるからです。これは、含まれているか必要な PHP ファイルを保存するログ データを探しています。そのため、include や require よりも遅くなります。

if (!defined(php)) {
    include 'php';
    define(php, 1);
}

このまま使うだけで…

于 2015-08-06T08:44:14.430 に答える