Цитата |
---|
Михаил написал: Почему так происходит? |
Ну давай разберемся
Как только в файле \var\www\html\local\lib\myfun.php вы прописываете namespace local\lib то у вас получается имя класса: \local\lib\myfun.
Следовательно в переменной $className будет содержатся именно это.
Соответственно фрагмент:
Код |
---|
$filePath = $_SERVER["DOCUMENT_ROOT"].'/local/lib/';
$filePath .= ToLower($className); |
В $filePath положит:
Код |
---|
/var/www/html/local/lib/\local\lib\myfun |
и соответственно:
Код |
---|
$filePath .= str_replace('\\', '/', $filePath);
$filePath .= '.php'; |
приведут к:
Код |
---|
/var/www/html/local/lib//local/lib/myfun.php |
Что идеологически не верно
Раскрою секрет нашего autoloader'а (используется до сих пор):
Код |
---|
/**
* - /local/php_interface/classes/{Path|raw}/{*|raw}.php
* - /local/php_interface/classes/{Path|ucfirst,lowercase}/{*|ucfirst,lowercase}.php
*/
spl_autoload_register(function($sClassName)
{
$sClassFile = __DIR__.'/classes';
if ( file_exists($sClassFile.'/'.str_replace('\\', '/', $sClassName).'.php') )
{
require_once($sClassFile.'/'.str_replace('\\', '/', $sClassName).'.php');
}
$arClass = explode('\\', strtolower($sClassName));
foreach($arClass as $sPath )
{
$sClassFile .= '/'.ucfirst($sPath);
}
$sClassFile .= '.php';
if (file_exists($sClassFile))
{
require_once($sClassFile);
}
}); |
Размещать в /local/php_interface/init.php
Классы размещать в: /local/php_interface/classes/ и соответственно namespace
Например класс: SuperPrice (без namespace) размещать МОЖНО в
Код |
---|
- /local/php_interface/classes/SuperPrice.php
- /local/php_interface/classes/Superprice.php |
А класс: \SuperPuper\SuperPrice (в файле обязательно должен быть namespace) в:
Код |
---|
- /local/php_interface/classes/SuperPuper/SuperPrice.php
- /local/php_interface/classes/Superpuper/Superprice.php |