特にエイリアス、つまりクラスのインポートに関しては、phpで名前空間を実装することにかなり混乱しています。
このチュートリアルのチュートリアルに従いました:
- PHP V5.3 名前空間を活用して読み取り可能で保守可能なコード(Don Denoncourt 著、2011 年 3 月 1 日、IBM Developerworks 向け)
しかし、私は理解__autoload
してい__autoload
ません.
<?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);
?>
Conan.php
のフォルダーに保存しないと、エラーが発生しますが、barbarian
<?php
require_once "autoload.php";
use \barbarian\Conan as Cimmerian;
$conan = new Cimmerian();
var_dump($conan);
?>
エラーメッセージ、
警告: require(barbarian/Conan.php): ストリームを開けませんでした: No such file or directory in C:\wamp\www\test\2013\php\namepsace\autoload.php 行 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;
}
?>
エイリアス クラスをフォルダーに格納する必要がありますか? 使用時にクラスをフォルダに保存せずにインポートすることはできますautoload
か?