Benutzer-Werkzeuge

Webseiten-Werkzeuge


dev:all:psr-0de

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Nächste Überarbeitung
Vorhergehende Überarbeitung
Letzte ÜberarbeitungBeide Seiten der Revision
dev:all:psr-0de [12.08.2014 08:08] – angelegt Manuela v.d.Deckendev:all:psr-0de [13.08.2014 16:34] – [Unterstriche in Namensräumen and Klassennamen] Manuela v.d.Decken
Zeile 6: Zeile 6:
 ===== Verbindliches ===== ===== Verbindliches =====
  
-  * Ein voll qualifizierter Namensraum und Klassenname muss die folgende Struktur haben: ''\<Vendor Name>\(<Namespace>\)*<Class Name>'' +  * Ein voll qualifizierter Namespace und Klassenname muss die folgende Struktur haben: ''\<Vendor Name>\(<Namespace>\)*<Class Name>'' 
-  * Jeder Namensraum muss einen Top-Level Namensraum ("Vendor Name") haben. +  * Jeder Namespace muss einen Top-Level Namespace ("Vendor Name") haben. 
-  * Jeder Namensraum kann beliebig viele Unter-Namensräume definieren. +  * Jeder Namespace kann beliebig viele Unter-Namespaces definieren. 
-  * Jeder Namensraum-Trenner wird beim Laden vom Dateisystem in einen DIRECTORY_SEPARATOR konvertiert. +  * Jeder Namespace-Trenner wird beim Laden vom Dateisystem in einen DIRECTORY_SEPARATOR konvertiert. 
-  * Jeder **_** im Klassennamen wird zu einem DIRECTORY_SEPARATOR konvertiert. :!: //Anpassung für WB:// Der **_** hat keine spezielle Bedeutung in der __normalen__ Definition eines Namensraumes, bei Pseudo-Namensräumen (siehe [[dev:all:psr-1de|PSR-1]]) wird er jedoch in einen DIRECTORY_SEPERATOR umgewandelt, was in diesem Fall Ordnernamen mit **_** verbietet. +  * Jeder **_** im Klassennamen wird zu einem DIRECTORY_SEPARATOR konvertiert. :!: //Anpassung für WB:// Der **_** hat keine spezielle Bedeutung in der __normalen__ Definition eines Namespace, bei Pseudo-Namespaces (siehe [[dev:all:psr-1de|PSR-1]]) wird er jedoch in einen DIRECTORY_SEPERATOR umgewandelt, was in diesem Fall Ordnernamen mit **_** verbietet. 
-  * Der voll qualifizierte Namensraum und Klassennamen wird beim Zugriff auf das Dateisystem um die Endung **.php** ergänzt. +  * Der voll qualifizierte Namespace und Klassennamen wird beim Zugriff auf das Dateisystem um die Endung **.php** ergänzt. 
-  * Alphabetische Zeichen (A-Z) in Vendornamen, Namensräumen und Klassen können jede beliebige Kombination aus Gross- und Kleinbuchstaben sein. :!: In [[dev:all:psr-1de|PSR-1]] wird dieses noch eingeschränkt! +  * Alphabetische Zeichen (A-Z) in Vendornamen, Namespaces und Klassen können jede beliebige Kombination aus Gross- und Kleinbuchstaben sein. :!: In [[dev:all:psr-1de|PSR-1]] wird dieses noch eingeschränkt!
- +
-===== Examples =====+
  
 +===== Beispiele =====
  
     \Doctrine\Common\IsolatedClassLoader => /path/to/project/lib/vendor/Doctrine/Common/IsolatedClassLoader.php     \Doctrine\Common\IsolatedClassLoader => /path/to/project/lib/vendor/Doctrine/Common/IsolatedClassLoader.php
-    \Symfony\Core\Request => /path/to/project/lib/vendor/Symfony/Core/Request.php +    \Symfony\Core\Request                => /path/to/project/lib/vendor/Symfony/Core/Request.php 
-    \Zend\Acl => /path/to/project/lib/vendor/Zend/Acl.php +    \Zend\Acl                            => /path/to/project/lib/vendor/Zend/Acl.php 
-    \Zend\Mail\Message => /path/to/project/lib/vendor/Zend/Mail/Message.php+    \Zend\Mail\Message                   => /path/to/project/lib/vendor/Zend/Mail/Message.php
  
-===== Underscores in Namespaces and Class Names =====+===== Unterstriche in Namespaces and Klassennamen =====
  
- +    \namespace\package\Class_Name      => /path/to/project/lib/vendor/namespace/package/Class/Name.php
-    \namespace\package\Class_Name => /path/to/project/lib/vendor/namespace/package/Class/Name.php+
     \namespace\package_name\Class_Name => /path/to/project/lib/vendor/namespace/package_name/Class/Name.php     \namespace\package_name\Class_Name => /path/to/project/lib/vendor/namespace/package_name/Class/Name.php
  
-The standards we set here should be the lowest common denominator for painless autoloader interoperabilityYou can test that you are following these standards by utilizing this sample SplClassLoader implementation which is able to load PHP 5.3 classes.+Die Standards die wir hier setzen sollten der kleinste gemeinsame Nenner zum problemlosen Zusammenspiel der Autoloader seinMit der Beispielimplementation des SplClassLoader können Sie testen, ob ihre Implementation den Standards entspricht. 
 + 
 +===== Beispiel Implementation ===== 
 + 
 +Unten ist eine einfache Beispiel-Funktion, die aufzeigen soll, wie die oben 
 +vorgeschlagenen Standards automatisch geladen werden. 
 + 
 +<file php ExampleAutoloader.php> 
 +<?php 
 + 
 +function autoload($className) 
 +
 +    $className = ltrim($className, '\\'); 
 +    $fileName  = ''; 
 +    $namespace = ''; 
 +    if ($lastNsPos = strrpos($className, '\\')) { 
 +        $namespace = substr($className, 0, $lastNsPos); 
 +        $className = substr($className, $lastNsPos + 1); 
 +        $fileName  = str_replace('\\', DIRECTORY_SEPARATOR, $namespace) . DIRECTORY_SEPARATOR; 
 +    } 
 +    $fileName .= str_replace('_', DIRECTORY_SEPARATOR, $className) . '.php'; 
 + 
 +    require $fileName; 
 +
 + 
 +</file> 
 + 
 +===== SplClassLoader Implementation ===== 
 + 
 +Die folgende GIST ist eine Beispielimplementierung, wie SplClassLoader Ihre Klassen laden können, wenn sie den oben vorgegebenen Standards folgen. Es ist der aktuell empfohlene Weg, um PHP-5.3 Klassen zu laden. 
 + 
 +[[http://gist.github.com/221634|gist.github.com/221634]] 
 + 
 + --- //[[manuela@isteam.de|Manuela v.d.Decken]] 12.08.2014 11:39// 
 + 
 +