Heim >Backend-Entwicklung >PHP-Tutorial >PHP detaillierte Erläuterung von Anwendungsbeispielen, Namespace, importierten Klassendateien und automatisch geladenen Klassen
use verwendet nur den Namespace ,
, aber um eine Klasse aufzurufen, müssen Sie die Klassendatei laden, oder sie automatisch laden .
Auch wenn eine der Klassen eingeführt wird und kein automatischer Lademechanismus vorhanden ist, wird dennoch ein Fehler gemeldet
Mehrere Verwendungszwecke
namespace Blog\Article; class Comment { } //创建一个BBS空间(我有打算开个论坛) namespace BBS; //导入一个命名空间 use Blog\Article; //导入命名空间后可使用限定名称调用元素 $article_comment = new Article\Comment(); //为命名空间使用别名 use Blog\Article as Arte; //使用别名代替空间名 $article_comment = new Arte\Comment(); //导入一个类 use Blog\Article\Comment; //导入类后可使用非限定名称调用元素 $article_comment = new Comment(); //为类使用别名 use Blog\Article\Comment as Comt; //使用别名代替空间名 $article_comment = new Comt();
1. vorausgesetzt es gibt einen automatischen Lademechanismus)
use OSS\OssClient; // 表示引入Class 'OSS\OssClient'
Bei der Verwendung kann
$ossClient = new OSS\OssClient($accessKeyId, $accessKeySecret, $endpoint, false);
oder so
$ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint, false);
verwendet werden!
2. Die zweite Einführungsmethode (vorausgesetzt, es gibt einen automatischen Lademechanismus)
import('@.ORG.OSS.OssClient'); // thinkphp中的加载机制
kann nur in einem der
$ossClient = new OSS\OssClient($accessKeyId, $accessKeySecret, $endpoint, false); // 其中OSS是命名空间
thinkphp-Mechanismen verwendet werden Beim automatischen Laden von Namespaces können die Namespaces im
Framework Liberary-Verzeichnis wie folgt automatisch identifiziert und lokalisiert werden:
Bibliotheksframework KlassenbibliothekVerzeichnis
│ ├ ─Think Core Think-Klassenbibliothekspaketverzeichnis
│ ├─Org Org-Klassenbibliothekspaketverzeichnis
│ ├─ ... Weitere Klassenbibliotheksverzeichnisse
Wenn es also einen Namespace gibt, gibt es keinen Ich muss es vorstellen. Dokumente sind ebenfalls verfügbar.
Aber für eine Klasse ohne Namespace wird ein Fehler gemeldet, wenn Sie keine Datei importieren.
Einfach importieren,
3.autoload
Dies ist eine Autoloading-Funktion. In PHP5 wird diese Funktion ausgelöst, wenn wir eine undefinierte Klasse instanziieren. Schauen Sie sich das folgende Beispiel an:
printit.class.php <?php class PRINTIT { function doPrint() { echo 'hello world'; } } ?> index.php <? function autoload( $class ) { $file = $class . '.class.php'; if ( is_file($file) ) { require_once($file); } } $obj = new PRINTIT(); $obj->doPrint(); ?>
Nach dem Ausführen von index.php wird „Hallo Welt“ normal ausgegeben. Da printit.class.php in index.php nicht enthalten ist, wird beim Instanziieren von printit automatisch der Wert des Parameters $class aufgerufen. Zu diesem Zeitpunkt wird printit.class.php eingeführt .
4.spl_autoload_register
Sehen Sie sich noch einmal spl_autoload_register() an. Diese Funktion hat den gleichen Effekt wie autoload:
<? function loadprint( $class ) { $file = $class . '.class.php'; if (is_file($file)) { require_once($file); } } spl_autoload_register( 'loadprint' ); $obj = new PRINTIT(); $obj->doPrint(); ?>
Ersetzen Sie autoload durch die Funktion „loadprint“. Aber Loadprint wird nicht wie Autoload automatisch ausgelöst. Spl_autoload_register() wird ausgeführt. Es weist PHP an, Loadprint() auszuführen, wenn es auf eine undefinierte Klasse trifft.
spl_autoload_register() ruft die statische -Methode
<? class test { public static function loadprint( $class ) { $file = $class . '.class.php'; if (is_file($file)) { require_once($file); } } } spl_autoload_register( array('test','loadprint') ); //另一种写法:spl_autoload_register( "test::loadprint" ); $obj = new PRINTIT(); $obj->doPrint(); ?>auf
Das obige ist der detaillierte Inhalt vonPHP detaillierte Erläuterung von Anwendungsbeispielen, Namespace, importierten Klassendateien und automatisch geladenen Klassen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!