Namespaces overview
Overzicht van namespaces
Wat zijn namespaces? In de breedste definitie zijn namespaces een manier om items te encapsuleren. Dit kan in veel contexten als een abstract concept worden gezien. Bijvoorbeeld, in elk besturingssysteem dienen mappen om gerelateerde bestanden te groeperen en fungeren als een namespace voor de bestanden binnenin. Als concreet voorbeeld kan het bestand foo.txt zowel in de map /home/greg als in /home/other bestaan, maar twee kopieën van foo.txt kunnen niet in dezelfde map co-existeren. Bovendien, om het foo.txt bestand buiten de map /home/greg te benaderen, moeten we de naam van de map aan de bestandsnaam voorafgaan met de directory separator om foo.txt te krijgen. Ditzelfde principe geldt voor namespaces in de programmeerwereld.
In de PHP-wereld zijn namespaces ontworpen om twee problemen op te lossen waarmee auteurs van bibliotheken en applicaties worden geconfronteerd bij het creëren van herbruikbare code-elementen zoals klassen of functies:
- Naamconflicten tussen code die je maakt, en interne PHP klassen/functies/constants of klassen/functies/constants van derden.
- De mogelijkheid om Extra_Long_Names te aliasen (of te verkorten) om het eerste probleem te verlichten, wat de leesbaarheid van de broncode verbetert.
PHP Namespaces bieden een manier om gerelateerde klassen, interfaces, functies en constants te groeperen. Hier is een voorbeeld van namespace-syntax in PHP:
Voorbeeld: Namespace syntax voorbeeld
<?php
namespace my\name; // zie sectie "Namespaces definiëren"
class MyClass {}
function myfunction() {}
const MYCONST = 1;
$a = new MyClass;
$c = new \my\name\MyClass; // zie sectie "Globale ruimte"
$a = strlen('hi'); // zie sectie "Namespaces gebruiken: terugvallen op globale
// functie/constant"
$d = namespace\MYCONST; // zie sectie "namespace operator en __NAMESPACE__
// constant"
$d = __NAMESPACE__ . '\MYCONST';
echo constant($d); // zie sectie "Namespaces en dynamische taalfeatures"
?>
Opmerking: > Namespace-namen zijn niet hoofdlettergevoelig.
Opmerking: > De namespace naam
PHP, en samengestelde namen die met deze naam beginnen (zoalsPHP\Classes), zijn gereserveerd voor intern taalgebruik en mogen niet in de gebruikerscode worden gebruikt.