Ich bin ziemlich verwirrt bei der Implementierung von Namespace in PHP, vor allem, wenn es um Alias - Importieren von Klassen kommt.Muss der PHP-Namespace-Autoloader Ordner verwenden?
Ich habe das Tutorial von diesem Tutorial gefolgt:
- Leveraging PHP V5.3 namespaces for readable and maintainable code (von Don Denoncourt, 1. März 2011, für IBM developer)
Aber ich verstehe nicht - wenn __autoload
verwendet wird , warum ich muss die Alias-Klassen in Ordnern speichern, aber wenn __autoload
nicht verwendet wird, sind die Aliasnamen im Namespace einfach in Ordnung, wie folgt,
<?php
namespace barbarian;
class Conan {
var $bodyBuild = "extremely muscular";
var $birthDate = 'before history';
var $skill = 'fighting';
}
namespace obrien;
class Conan {
var $bodyBuild = "very skinny";
var $birthDate = '1963';
var $skill = 'comedy';
}
use \barbarian\Conan as mother;
$conan = new mother();
var_dump($conan);
var_dump($conan->bodyBuild);
$conan = new \obrien\Conan();
var_dump($conan);
var_dump($conan->birthDate);
?>
Während dies werde ich Fehler bekommen, wenn ich nicht speichern Conan.php
im Ordner von barbarian
<?php
require_once "autoload.php";
use \barbarian\Conan as Cimmerian;
$conan = new Cimmerian();
var_dump($conan);
?>
die Fehlermeldung,
Warning: require (Barbar/Conan. php): Fehler beim Öffnen des Streams: Keine solche Datei oder ein Verzeichnis in C: \ wamp \ www \ test \ 2013 \ php \ namespace \ autoload.php on line 12
Die autoload.php:
<?php
function __autoload($classname) {
$classname = ltrim($classname, '\\');
$filename = '';
$namespace = '';
if ($lastnspos = strripos($classname, '\\')) {
$namespace = substr($classname, 0, $lastnspos);
$classname = substr($classname, $lastnspos + 1);
$filename = str_replace('\\', '/', $namespace) . '/';
}
$filename .= str_replace('_', '/', $classname) . '.php';
require $filename;
}
?>
Ist es ein Muss alias Klassen in Ordnern speichern? Ist es möglich, die Klassen zu importieren, ohne sie in Ordnern zu speichern, wenn autoload
verwendet wird?
danke für die Antwort. Jetzt verstehe ich die Wichtigkeit von Ordnern beim Autoloading und Aliasing. – laukok