Jestem dość zdezorientowany w implementowaniu przestrzeni nazw w php, zwłaszcza jeśli chodzi o alias - importowanie klas.Czy automatyczne ładowanie nazw w PHP musi korzystać z folderów?
Mam po kursie z tego poradnika:
- Leveraging PHP V5.3 namespaces for readable and maintainable code (przez Don Denoncourt; 1 marca 2011; dla IBM developerWorks)
Ale nie rozumiem - gdy jest używany __autoload
, dlaczego mam mieć do przechowywać klas aliasów w folderach, ale kiedy __autoload
jest używany nie, alias w przestrzeni nazw jest w porządku, jak poniżej,
<?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);
?>
Mimo to będę się błąd, jeśli nie przechowywać Conan.php
w folderze z barbarian
<?php
require_once "autoload.php";
use \barbarian\Conan as Cimmerian;
$conan = new Cimmerian();
var_dump($conan);
?>
komunikat o błędzie,
Warning: require (barbarzyńca/Conana. php): nie udało się otworzyć strumienia: nie ma takiego pliku lub katalogu w katalogu C: \ wamp \ www \ test \ 2013 \ php \ namepsace \ autoload.php w linii 12
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;
}
?>
Czy to koniecznością przechowywać klas alias w folderach? Czy możliwe jest zaimportowanie klas bez zapisywania ich w folderach, gdy używana jest funkcja autoload
?
dzięki za odpowiedź. Teraz rozumiem znaczenie folderów w automatycznym ładowaniu i aliasowaniu. – laukok