Heim > Backend-Entwicklung > PHP-Tutorial > php3, das diese Tutorials nicht haben

php3, das diese Tutorials nicht haben

高洛峰
Freigeben: 2016-10-31 11:37:37
Original
1051 Leute haben es durchsucht

php.net
(PHP 5 >= 5.3.0, PHP 7)

Namespaces definieren

In einem Namespace kann zwar jeder legale PHP-Code enthalten sein, aber nur der Die folgenden Codetypen sind von Namespaces betroffen: Klassen (einschließlich abstrakter Klassen und Merkmale), Schnittstellen, Funktionen und Konstanten.
Wenn eine Datei einen Namespace enthält, muss sie den Namespace vor allen anderen Codes deklarieren, außer einem: dem Schlüsselwort „declare“. Jeglicher Nicht-PHP-Code, einschließlich Leerzeichen, darf nicht vor einer Namespace-Deklaration stehen.

<html>
<?phpnamespace MyProject; // 致命错误 - 命名空间必须是程序脚本的第一条语句
?>
Nach dem Login kopieren

Derselbe Namespace kann in mehreren Dateien definiert werden, wodurch der Inhalt desselben Namespace aufgeteilt und in verschiedenen Dateien gespeichert werden kann.

Unternamespaces definieren

<?php
namespace MyProject\Sub\Level;
const CONNECT_OK = 1;
class Connection { /* ... */ }
function connect() { /* ... */  }
?>
Nach dem Login kopieren

Mehrere Namespaces in derselben Datei definieren

Hinweis: In der tatsächlichen Programmierpraxis wird dringend davon abgeraten, mehrere Namespaces in derselben Datei zu definieren Datei. Definieren Sie mehrere Namensräume in der Datei!

<?php
namespace MyProject {
const CONNECT_OK = 1;
class Connection { /* ... */ }
function connect() { /* ... */  }
}namespace AnotherProject
 {const CONNECT_OK = 1;class Connection 
 { /* ... */ }function connect() { /* ... */  }
}?>
Nach dem Login kopieren

Verwendung des Namespace

Drei Möglichkeiten, auf Klassennamen zu verweisen:

Unqualifizierter Name (ein Bezeichner, der kein Namespace-Trennzeichen im Namen enthält) oder Klasse Name ohne Präfix. Zum Beispiel $a=new foo(); oder foo::staticmethod();. Wenn der aktuelle Namespace currentnamespace ist, wird foo in currentnamespacefoo aufgelöst. Wenn der Code, der foo verwendet, global ist und keinen Code in einem Namespace enthält, wird foo als foo aufgelöst. * *Warnung**: Wenn eine Funktion oder Konstante im Namespace undefiniert ist, wird der unqualifizierte Funktions- oder Konstantenname in einen globalen Funktions- oder Konstantennamen aufgelöst.

Qualifizierte Namen (Bezeichner mit Namespace-Trennzeichen im Namen) oder Namen, die ein Präfix enthalten, wie z. B. $a = new subnamespacefoo(); oder subnamespacefoo::staticmethod();. Wenn der aktuelle Namespace currentnamespace ist, wird foo in currentnamespacesubnamespacefoo aufgelöst. Wenn der Code, der foo verwendet, global ist und der Code in keinem Namespace enthalten ist, wird foo in den Subnamespacefoo aufgelöst.

Ein vollständig qualifizierter Name (ein Bezeichner, dessen Name ein Namespace-Trennzeichen enthält und mit einem Namespace-Trennzeichen beginnt) oder ein Name, der einen globalen Präfixoperator enthält. Um auf eine globale Klasse, Funktion oder Konstante zuzugreifen, verwenden Sie einen vollständig qualifizierten Namen, z. B. strlen() oder Exception .

Tipps:

$a = &#39;\namespacename\classname&#39;;
$obj = new $a; 
$a = &#39;namespacename\classname&#39;;
$obj = new $a;
$b = &#39;namespacename\funcname&#39;;
$b(); // prints namespacename\funcname$b = &#39;\namespacename\funcname&#39;;
$b(); // also prints namespacename\funcname
Nach dem Login kopieren

Verwenden Sie verwandte Konstanten

Der Wert der Konstante __NAMESPACE__ ist eine Zeichenfolge, die den Namen des aktuellen Namespace enthält. Im globalen Code, der in keinem Namespace enthalten ist, enthält er eine leere Zeichenfolge.

Namespaces verwenden: Aliase/Importe

<?php
namespace foo;
use My\Full\Classname as Another;

// 下面的例子与 use My\Full\NSname as NSname 相同
use My\Full\NSname;

// 导入一个全局类
use ArrayObject;

// importing a function (PHP 5.6+)
use function My\Full\functionName;

// aliasing a function (PHP 5.6+)
use function My\Full\functionName as func;

// importing a constant (PHP 5.6+)
use const My\Full\CONSTANT;

$obj = new namespace\Another; // 实例化 foo\Another 对象
$obj = new Another; // 实例化 My\Full\Classname 对象
NSname\subns\func(); // 调用函数 My\Full\NSname\subns\func
$a = new ArrayObject(array(1)); // 实例化 ArrayObject 对象
// 如果不使用 "use \ArrayObject" ,则实例化一个 foo\ArrayObject 对象
func(); // calls function My\Full\functionName
echo CONSTANT; // echoes the value of My\Full\CONSTANT
?>
Nach dem Login kopieren

Klassennamen werden immer in Namen im aktuellen Namespace aufgelöst. Daher müssen Sie beim Zugriff auf einen Klassennamen, der systemintern oder nicht in einem Namespace enthalten ist, den vollständig qualifizierten Namen verwenden.

Verwandte Etiketten:
php
Quelle:php.cn
Erklärung dieser Website
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
Aktuelle Ausgaben
PHP-Datenerfassung?
Aus 1970-01-01 08:00:00
0
0
0
PHP-Erweiterung intl
Aus 1970-01-01 08:00:00
0
0
0
Wie man PHP gut lernt
Aus 1970-01-01 08:00:00
0
0
0
Mehrere PHP-Versionen
Aus 1970-01-01 08:00:00
0
0
0
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage