Heim  >  Artikel  >  Backend-Entwicklung  >  PHP detaillierte Erläuterung von Anwendungsbeispielen, Namespace, importierten Klassendateien und automatisch geladenen Klassen

PHP detaillierte Erläuterung von Anwendungsbeispielen, Namespace, importierten Klassendateien und automatisch geladenen Klassen

伊谢尔伦
伊谢尔伦Original
2017-07-01 10:07:476137Durchsuche

use verwendet nur den Namespace ,
, aber um eine Klasse aufzurufen, müssen Sie die Klassendatei laden, oder sie automatisch laden .

PHP detaillierte Erläuterung von Anwendungsbeispielen, Namespace, importierten Klassendateien und automatisch geladenen Klassen

PHP detaillierte Erläuterung von Anwendungsbeispielen, Namespace, importierten Klassendateien und automatisch geladenen Klassen

Auch wenn eine der Klassen eingeführt wird und kein automatischer Lademechanismus vorhanden ist, wird dennoch ein Fehler gemeldet

PHP detaillierte Erläuterung von Anwendungsbeispielen, Namespace, importierten Klassendateien und automatisch geladenen Klassen

PHP detaillierte Erläuterung von Anwendungsbeispielen, Namespace, importierten Klassendateien und automatisch geladenen Klassen

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();

PHP detaillierte Erläuterung von Anwendungsbeispielen, Namespace, importierten Klassendateien und automatisch geladenen Klassen

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.
PHP detaillierte Erläuterung von Anwendungsbeispielen, Namespace, importierten Klassendateien und automatisch geladenen Klassen

PHP detaillierte Erläuterung von Anwendungsbeispielen, Namespace, importierten Klassendateien und automatisch geladenen Klassen

PHP detaillierte Erläuterung von Anwendungsbeispielen, Namespace, importierten Klassendateien und automatisch geladenen Klassen

Einfach importieren,
PHP detaillierte Erläuterung von Anwendungsbeispielen, Namespace, importierten Klassendateien und automatisch geladenen Klassen

PHP detaillierte Erläuterung von Anwendungsbeispielen, Namespace, importierten Klassendateien und automatisch geladenen Klassen

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 &#39;hello world&#39;;
 }
}
?> 
 
index.php 
 
<?
function autoload( $class ) {
 $file = $class . &#39;.class.php&#39;;  
 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 . &#39;.class.php&#39;;  
 if (is_file($file)) {  
  require_once($file);  
 } 
} 
 
spl_autoload_register( &#39;loadprint&#39; ); 
 
$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 . &#39;.class.php&#39;;  
  if (is_file($file)) {  
   require_once($file);  
  } 
 }
} 
 
spl_autoload_register(  array(&#39;test&#39;,&#39;loadprint&#39;)  );
//另一种写法: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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn