Heim  >  Artikel  >  Backend-Entwicklung  >  Sie wissen immer noch nichts über include und require in PHP? Schauen Sie sich diesen Artikel an!

Sie wissen immer noch nichts über include und require in PHP? Schauen Sie sich diesen Artikel an!

青灯夜游
青灯夜游nach vorne
2021-07-30 17:57:092411Durchsuche

Dieser Artikel gibt Ihnen eine detaillierte Einführung in die Themen „include“ und „require“ in PHP, damit jeder das Thema „include“ und „require“ vollständig verstehen kann.

Sie wissen immer noch nichts über include und require in PHP? Schauen Sie sich diesen Artikel an!

In PHP gibt es zwei Möglichkeiten, externe Dateien einzubinden, nämlich include und require. Was ist der Unterschied zwischen ihnen?

Wenn die Datei nicht existiert oder ein Fehler auftritt, generiert require einen Fehler der Stufe E_COMPILE_ERROR und das Programm stoppt die Ausführung. Das Include generiert lediglich eine Warnung und das Skript wird weiterhin ausgeführt.

Das ist der Hauptunterschied zwischen ihnen. In anderen Aspekten ist require im Grunde dasselbe wie include.

  • Die eingebundene Datei wird zunächst nach dem durch den Parameter angegebenen Pfad durchsucht. Wenn kein Verzeichnis angegeben ist (nur der Dateiname), wird nach dem durch include_path angegebenen Verzeichnis gesucht. Wenn die Datei nicht unter include_path gefunden wird, sucht include schließlich in dem Verzeichnis, in dem sich die aufrufende Skriptdatei befindet, und im aktuellen Arbeitsverzeichnis.
  • Wenn ein Pfad definiert ist, unabhängig davon, ob es sich um einen absoluten Pfad oder einen relativen Pfad zum aktuellen Verzeichnis handelt , include_path wird vollständig ignoriert
  • include_path Definiert in php.ini
  • Wenn eine Datei eingebunden wird, erbt der darin enthaltene Code den Variablenbereich der Include-Zeile. Von diesem Zeitpunkt an sind alle Variablen, die in der aufrufenden Datei in dieser Zeile verfügbar sind, auch in der aufgerufenen Datei verfügbar. Allerdings haben alle in Include-Dateien definierten Funktionen und Klassen einen globalen Gültigkeitsbereich. Zusätzlich zu den gewöhnlichen Funktionen require_once und include_once sind ihre Funktionen:

Wenn die Datei bereits eingebunden wurde, wird sie nicht erneut eingebunden . Wie der Name dieser Anweisung schon sagt, kann „Nur einmal einschließen“

    verwendet werden, wenn dieselbe Datei während der Skriptausführung möglicherweise mehr als einmal eingebunden wird und Sie sicherstellen möchten, dass sie nur einmal eingebunden wird, um eine Neudefinition von Funktionen und eine Neuzuweisung von Variablen zu vermeiden Fragen
  • Schauen wir uns einige Beispiele an:
  • // a.php 不存在
    include "a.php"; // warning
    // require "a.php"; // error
    
    echo 111; // 使用include时111会输出
    
    // file1.php 中只有一行代码echo 'file1';
    require_once 'includeandrequire/file1.php'; // file1
    require_once 'includeandrequire/file1.php'; // noting
    
    include_once 'includeandrequire/file1.php'; // noting
    include_once 'includeandrequire/file1.php'; // noting
    
    require 'includeandrequire/file1.php'; // file1
    require 'includeandrequire/file1.php'; // file1
    
    require 'includeandrequire/file1.php'; // file1
    require 'includeandrequire/file1.php'; // file1
Wir können sehen, dass diese Datei nach dem erfolgreichen Laden des ersten _once, egal ob require_once oder include_once, nicht erneut geladen wird. Ohne _once wird die Datei wiederholt geladen.

file2.php

<?php

echo &#39;file2:&#39; . $a, PHP_EOL;
echo &#39;file2:&#39; . $b, PHP_EOL;
$b = "file2";

myFile.php

<?php

$a = &#39;myFile&#39;;
$b = &#39;youFile&#39;;
require_once &#39;includeandrequire/file2.php&#39;;
echo $a, PHP_EOL;
echo $b, PHP_EOL;

// 输出结果
// file2:myFile
// file2:youFile
// myFile
// file2

file3.php
<?php

$c = &#39;file3&#39;;

myFile.php
<?php
function test(){
    require_once &#39;includeandrequire/file3.php&#39;;
    echo $c, PHP_EOL; // file3
}
test();
echo $c, PHP_EOL; // empty

Die eingebundene Datei kann die Variablen in der übergeordneten Datei abrufen, und die übergeordnete Datei kann auch die Variablen in der eingebundenen Datei abrufen. Sie müssen jedoch auf einen Sonderfall von _once achten.

function foo(){
    require_once &#39;includeandrequire/file3.php&#39;;
    return $c;
}

for($a=1;$a<=5;$a++){
    echo foo(), PHP_EOL;
}

// file3
// empty
// empty
// empty
// empty

Bei Verwendung von _once und Laden in einer Schleife wird zum ersten Mal nur der Inhalt in file3.php ausgegeben. Da sich der aktuelle Variablenbereich in der Methode befindet, werden nachfolgende Dateien nach Abschluss des ersten Ladevorgangs nicht erneut geladen. Zu diesem Zeitpunkt haben die nächsten vier Schleifen keinen

c-Standardwert.

Wenn eine Datei gleichzeitig mit _once in zwei Methoden geladen wird, wird sie dann trotzdem mit der zweiten Methode geladen? Sie wissen immer noch nichts über include und require in PHP? Schauen Sie sich diesen Artikel an!

function test1(){
    require_once &#39;includeandrequire/file1.php&#39;;
}
function test2(){
    require_once &#39;includeandrequire/file1.php&#39;;
}
test1(); // file1
test2(); // empty

Leider wird nur die erste Methode erfolgreich geladen und die zweite Methode wird nicht erneut geladen.

Welches eignet sich also besser für die tägliche Entwicklung?

In Bezug auf die Effizienz muss _once überprüft werden, ob die Effizienz geringer ist, aber es handelt sich nicht um einen absoluten Rückgang, der für unser bloßes Auge unsichtbar ist, sodass die Effizienz problematisch sein kann ignoriert. Und es bringt viel mehr Vorteile als ohne _once

    Basierend auf dem Prinzip des Fehlers im Voraus ist es besser, require_once zu verwenden. Denn nachdem die PHP-Fehlerstufe so angepasst wurde, dass keine Warnungen angezeigt werden, sind die Include-Warninformationen nicht sichtbar, was zu unvorhersehbaren Fehlern führt. Bei Verwendung in Methoden sollte _once nicht zum Laden von Dateien verwendet werden, insbesondere wenn diese Datei verwendet werden muss In mehreren Klassen oder Methoden kann die Verwendung von _once dazu führen, dass dieselbe Datei nicht in nachfolgenden Methoden geladen werden kann
  • Bei Verwendung von require oder include ist es am besten, keine Klammern zu verwenden, obwohl diese tatsächlich verwendet werden können, z. B. include (' xxx.php'); Es handelt sich um Ausdrucksschlüsselwörter, nicht um Systemmethoden. Verwenden Sie daher einfach include 'xxx.php'.
  • Wenn die Include- und Require-Dateien eine Rückgabe enthalten, können Sie Variablen verwenden, um die von retun zurückgegebenen Daten zu empfangen Darüber hinaus können Sie auch Nicht-PHP-Dateien und Remote-Dateien laden (für das Remote-Laden muss sichergestellt werden, dass „allow_url_include“ in php.ini aktiviert ist), wie zum Beispiel:
  • file4.php
    <?php
    
    return &#39;file4&#39;;
    
    file4.txt
    可以吧
    
    myFile.php
    <?php
    $v = require &#39;includeandrequire/file4.php&#39;;
    echo $v, PHP_EOL; // file4
    
    include &#39;includeandrequire/file4.txt&#39;;
    // 可以吧
    
    include &#39;https://www.baidu.com/index.html&#39;;
    // 百度首页的html代码
  • Jetzt haben wir ein sehr tiefes Verständnis von include und require Diese beiden Möglichkeiten zum Laden von Dateien sind nicht kompliziert, aber es kann leicht zu Fallstricken kommen, insbesondere wenn _once in Methoden verwendet wird, muss besonders darauf geachtet werden. Zum Schluss noch ein kleiner Bonus, der eine Methode zum gleichzeitigen Laden aller Dateien im Verzeichnis kapselt:
  • function include_all_once ($pattern) {
        foreach (glob($pattern) as $file) { 
            require $file;
        }
    }
    
    include_all_once(&#39;includeandrequire/*&#39;);
    测试代码:https://github.com/zhangyue0503/dev-blog/blob/master/php/201911/source/%E5%BD%BB%E5%BA%95%E6%90%9E%E6%98%8E%E7%99%BDPHP%E4%B8%AD%E7%9A%84include%E5%92%8Crequire.php
Empfohlenes Lernen: „

PHP-Video-Tutorial

Das obige ist der detaillierte Inhalt vonSie wissen immer noch nichts über include und require in PHP? Schauen Sie sich diesen Artikel an!. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:juejin.cn. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen