suchen
HeimBackend-EntwicklungPHP-TutorialPHP 5.3中的命名空间:你用过了么?_PHP教程

【php100精选译文】命名空间是PHP 5.3中最重要的变化,对于C#和Java开发人员对这个词语非常熟悉了,他们终于可以更好地改变PHP应用程序的结构了。

为什么我们需要命名空间?

随着你的PHP代码库的增长,对之前定义的函数和类名进行修改时风险也更高了,当你试图增加第三方组件或插件时问题更严重,如果存在两个或两个以上的代码集实现了一个“Database”和“User”类会怎么样?

直到目前,唯一的解决办法是使用长的类/函数名,例如Wordpress在每个类和函数名前都使用了前缀“WP_”, Zend Framework使用了极具描述性的命名约定,导致类名非常冗长,如:

Zend_Search_Lucene_Analysis_Analyzer_Common_Text_CaseInsensitive

命名冲突问题可以使用命名空间来解决,PHP常量、类和函数可以被组合到命名空间库中。

如何定义命名空间?

默认情况下,所有常量、类和函数名都放在全局空间下,就和PHP支持命名空间之前一样。

在PHP文件的顶部使用一个关键字namespace就可以定义命名空间,它必须是第一个命令(declare除外),在它前面不能出现非PHP代码、HTML或空格。如:

<ol class="dp-c">
<li class="alt"><span><span></span><li class="">
<span></span><span class="comment"><font color="#008200">// define this code in the 'MyProject' namespace </font></span><span> </span>
</li></span></li>
<li class="alt"><span>namespace MyProject;  </span></li>
<li class=""><span> </span></li>
<li class="alt">
<span></span><span class="comment"><font color="#008200">// ... code ... </font></span><span> </span>
</li>
</ol>

这一行下面的代码都是指定给MyProject命名空间的,为相同代码块嵌套命名空间或定义多个命名空间是不可能的,如果你真这样干,只有最后一个命名空间才能识别,但你可以在同一个文件中定义不同的命名空间代码,如:

<ol class="dp-c">
<li class="alt"><span><span></span><li class=""><span>namespace MyProject1;  </span></li>
<li class="alt">
<span></span><span class="comment"><font color="#008200">// PHP code for the MyProject1 namespace </font></span><span> </span>
</li></span></li>
<li class=""><span> </span></li>
<li class="alt"><span>namespace MyProject2;  </span></li>
<li class="">
<span></span><span class="comment"><font color="#008200">// PHP code for the MyProject2 namespace </font></span><span> </span>
</li>
<li class="alt"><span> </span></li>
<li class="">
<span></span><span class="comment"><font color="#008200">// Alternative syntax </font></span><span> </span>
</li>
<li class="alt"><span>namespace MyProject3 {  </span></li>
<li class="">
<span> </span><span class="comment"><font color="#008200">// PHP code for the MyProject3 namespace </font></span><span> </span>
</li>
<li class="alt"><span>}  </span></li>
<li class=""><span>?>  </span></li>
</ol>

尽管这么干是可以的,但我建议你不要这么做,最好还是每个文件中只定义一个命名空间,免得把你弄糊涂了。

子命名空间

PHP允许定义具有层次的命名空间以便库能够细分,子命名空间使用一个反斜线字符()分隔,如:

◆MyProjectSubName

◆MyProjectDatabaseMySQL

◆CompanyNameMyProjectLibraryCommonWidget1

调用命名空间代码

在lib1.php文件中我们使用AppLib1 namespace命名空间定义了一个常量、一个函数和一个类,如:

lib1.php

<ol class="dp-xml">
<li class="alt"><span><span class="tag"><strong><font color="#006699"></font></strong></span><span> ?php  </span></span></li>
<li class=""><span>// application library 1  </span></li>
<li class="alt"><span>namespace AppLib1;  </span></li>
<li class=""><span> </span></li>
<li class="alt">
<span>const </span><span class="attribute"><font color="#ff0000">MYCONST</font></span><span> = </span><span class="attribute-value"><font color="#0000ff">'AppLib1MYCONST'</font></span><span>;  </span>
</li>
<li class=""><span> </span></li>
<li class="alt"><span>function MyFunction() {  </span></li>
<li class=""><span> return __FUNCTION__;  </span></li>
<li class="alt"><span>}  </span></li>
<li class=""><span> </span></li>
<li class="alt"><span>class MyClass {  </span></li>
<li class=""><span> static function WhoAmI() {  </span></li>
<li class="alt"><span>  return __METHOD__;  </span></li>
<li class=""><span> }  </span></li>
<li class="alt"><span>}  </span></li>
<li class="">
<span></span><span class="tag"><strong><font color="#006699">?></font></strong></span><span> </span>
</li>
</ol>

现在我们可以在另一个PHP文件包括这段代码,如:

myapp.php

<ol class="dp-xml">
<li class="alt"><span><span class="tag"><strong><font color="#006699"></font></strong></span><span> ?php  </span></span></li>
<li class=""><span>header('Content-type: text/plain');  </span></li>
<li class="alt"><span>require_once('lib1.php');  </span></li>
<li class=""><span> </span></li>
<li class="alt"><span>echo AppLib1MYCONST . "n";  </span></li>
<li class=""><span>echo AppLib1MyFunction() . "n";  </span></li>
<li class="alt"><span>echo AppLib1MyClass::WhoAmI() . "n";  </span></li>
<li class="">
<span></span><span class="tag"><strong><font color="#006699">?></font></strong></span><span> </span>
</li>
</ol>

在myapp.php中并没有定义命名空间,因此这段代码存在全局空间中,任何对MYCONST、MyFunction和MyClass的直接引用都会失败,因为它们存在于AppLib1命名空间中,为了调用lib1.php中的代码,我们可以在AppLib1命名空间前添加前缀定义一个完全合格的名称,下面是我载入myapp.php时的输出结果:

<ol class="dp-xml">
<li class="alt"><span><span>AppLib1MYCONST    </span></span></li>
<li class=""><span>AppLib1MyFunction    </span></li>
<li class="alt"><span>AppLib1MyClass::WhoAmI </span></li>
</ol>

完全合格名称可以变得很长,定义长名称,如App-Lib1-MyClass,有一些明显的好处。

原文:How to Use PHP Namespaces, Part 1: The Basics

作者:Craig Buckler


www.bkjia.comtruehttp://www.bkjia.com/PHPjc/446608.htmlTechArticle【php100精选译文】命名空间是PHP 5.3中最重要的变化,对于C#和Java开发人员对这个词语非常熟悉了,他们终于可以更好地改变PHP应用程序的结...
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
Wie identifiziert PHP die Sitzung eines Benutzers?Wie identifiziert PHP die Sitzung eines Benutzers?May 01, 2025 am 12:23 AM

PhpidentifiesAsersSSessionUsingSSessionCookiesAndSessionIDs.1) WHANE Session_Start () iscalled, phpGeneratesAuniqueSessionIDStoredInacookienMamePhpSsidontonTheusers.2) thisidallowStoretrieVessionDataFromtheServer.

Was sind einige Best Practices für die Sicherung von PHP -Sitzungen?Was sind einige Best Practices für die Sicherung von PHP -Sitzungen?May 01, 2025 am 12:22 AM

Die Sicherheit von PHP -Sitzungen kann durch folgende Maßnahmen erreicht werden: 1. Verwenden Sie Session_regenerate_id (), um die Sitzungs -ID zu regenerieren, wenn sich der Benutzer anmeldet oder eine wichtige Operation ist. 2. Verschlüsseln Sie die Übertragungssitz -ID durch das HTTPS -Protokoll. A. Verwenden Sie Session_save_path (), um das sichere Verzeichnis anzugeben, um Sitzungsdaten zu speichern und Berechtigungen korrekt festzulegen.

Wo werden standardmäßig PHP -Sitzungsdateien gespeichert?Wo werden standardmäßig PHP -Sitzungsdateien gespeichert?May 01, 2025 am 12:15 AM

PhpSessionFilesArestoredinTHedRectorySpecifiedBySession.save_path, typischerweise/tmponunix-likesystemsorc: \ windows \ temponwindows

Wie rufen Sie Daten aus einer PHP -Sitzung ab?Wie rufen Sie Daten aus einer PHP -Sitzung ab?May 01, 2025 am 12:11 AM

ToretriedatafromaphpSession, startThesessionwithSession_start () und AccessvariableSthe $ _SessionArray.Fexample: 1) StartTheSession: session_start (). 2) Abgerufen: $ username = $ _ Session ['username'];

Wie können Sie Sitzungen verwenden, um einen Einkaufswagen zu implementieren?Wie können Sie Sitzungen verwenden, um einen Einkaufswagen zu implementieren?May 01, 2025 am 12:10 AM

Zu den Schritten zum Erstellen eines effizienten Einkaufswagensystems mithilfe von Sitzungen gehören: 1) Verstehen Sie die Definition und Funktion der Sitzung. Die Sitzung ist ein serverseitiger Speichermechanismus, der verwendet wird, um den Benutzerstatus über Anforderungen hinweg aufrechtzuerhalten. 2) Implementieren Sie das grundlegende Sitzungsmanagement, z. B. das Hinzufügen von Produkten in den Einkaufswagen; 3) auf die fortschrittliche Nutzung ausdehnen und das Produktmengenmanagement und die Löschung der Produktmenge unterstützen; 4) Optimieren Sie Leistung und Sicherheit, indem Sie Sitzungsdaten fortsetzen und sichere Sitzungskennungen verwenden.

Wie erstellen und verwenden Sie eine Schnittstelle in PHP?Wie erstellen und verwenden Sie eine Schnittstelle in PHP?Apr 30, 2025 pm 03:40 PM

Der Artikel erläutert, wie Schnittstellen in PHP erstellt, implementiert und verwendet werden und sich auf ihre Vorteile für die Organisation von Code und die Wartbarkeit konzentriert.

Was ist der Unterschied zwischen Crypt () und Passage_hash ()?Was ist der Unterschied zwischen Crypt () und Passage_hash ()?Apr 30, 2025 pm 03:39 PM

In dem Artikel werden die Unterschiede zwischen CryPT () und Passage_hash () in PHP für Passwort -Hashing erörtert und sich auf ihre Implementierung, Sicherheit und Eignung für moderne Webanwendungen konzentriert.

Wie können Sie Cross-Site Scripting (XSS) in PHP verhindern?Wie können Sie Cross-Site Scripting (XSS) in PHP verhindern?Apr 30, 2025 pm 03:38 PM

In Artikel werden in PHP durch Eingabevalidierung, Ausgabecodierung und Verwendung von Tools wie OWASP ESAPI und HTML-Reinigungsmittel die Verhinderung des Cross-Site-Skripts (XSS) erläutert.

See all articles

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heiße Werkzeuge

DVWA

DVWA

Damn Vulnerable Web App (DVWA) ist eine PHP/MySQL-Webanwendung, die sehr anfällig ist. Seine Hauptziele bestehen darin, Sicherheitsexperten dabei zu helfen, ihre Fähigkeiten und Tools in einem rechtlichen Umfeld zu testen, Webentwicklern dabei zu helfen, den Prozess der Sicherung von Webanwendungen besser zu verstehen, und Lehrern/Schülern dabei zu helfen, in einer Unterrichtsumgebung Webanwendungen zu lehren/lernen Sicherheit. Das Ziel von DVWA besteht darin, einige der häufigsten Web-Schwachstellen über eine einfache und unkomplizierte Benutzeroberfläche mit unterschiedlichen Schwierigkeitsgraden zu üben. Bitte beachten Sie, dass diese Software

MantisBT

MantisBT

Mantis ist ein einfach zu implementierendes webbasiertes Tool zur Fehlerverfolgung, das die Fehlerverfolgung von Produkten unterstützen soll. Es erfordert PHP, MySQL und einen Webserver. Schauen Sie sich unsere Demo- und Hosting-Services an.

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

SecLists

SecLists

SecLists ist der ultimative Begleiter für Sicherheitstester. Dabei handelt es sich um eine Sammlung verschiedener Arten von Listen, die häufig bei Sicherheitsbewertungen verwendet werden, an einem Ort. SecLists trägt dazu bei, Sicherheitstests effizienter und produktiver zu gestalten, indem es bequem alle Listen bereitstellt, die ein Sicherheitstester benötigen könnte. Zu den Listentypen gehören Benutzernamen, Passwörter, URLs, Fuzzing-Payloads, Muster für vertrauliche Daten, Web-Shells und mehr. Der Tester kann dieses Repository einfach auf einen neuen Testcomputer übertragen und hat dann Zugriff auf alle Arten von Listen, die er benötigt.

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)