Возможно ли добавить? (namespace)
1.
KpuTuK (26.01.2014 / 20:32)
Добрый вечер))
Есть такой код:
<?php
define('DOCROOT', realpath(dirname(__FILE__)) . DIRECTORY_SEPARATOR);
set_include_path(DOCROOT);
spl_autoload_extensions('.php');
function my_autoload($class) {
$path = str_replace('\\', DIRECTORY_SEPARATOR, $class).'.php';
require_once($path);
}
spl_autoload_register('my_autoload');
?>
далее я вызываю класс Test находящийся в DOCROOT/system/classes/Test.php
<?php
use system\classes\Test;
new Test();
?>
Но мне хотелось бы видеть use CM\system\classes\Test;
Возможно "замутить" такое??
2.
Артур (26.01.2014 / 20:54)
не понял задачи
3.
KpuTuK (26.01.2014 / 21:01)
2.
Башка, ну я хочу добавить перед всеми пространствами имен CM тоесть
<?php
namespace system\classes;
?>
Должна превратиться в
<?php
namespace CM\system\classes;
?>
4.
Артур (26.01.2014 / 21:07)
Перемести тогда все в каталог CM или поменяй автозагрузчик так:
<?php
function my_autoload($class) {
$path = '\CM'.str_replace('\\', DIRECTORY_SEPARATOR, $class).'.php';
require_once($path);
}
5.
KpuTuK (26.01.2014 / 21:11)
4.
Башка, в том то все и дело что структуру я хочу оставить как есть))
Добавлено через 02:02 сек.
Дабы не плодить тем отпишу здесь....
поменял автозагрузчик на
spl_autoload_register(function ($class) {
require_once str_replace('\\', DIRECTORY_SEPARATOR, $class).'.php';
});
Выдало Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 2619240345 bytes) in /var/www/kputu258/data/www/srv16.ru/system/CodeMania.php on line 10
6.
Артур (26.01.2014 / 21:20)
Что то ты левое подключаешь, и зачем используешь DIRECTORY_SEPARATOR?
7.
KpuTuK (26.01.2014 / 21:31)
6.
Башка,
не подключаю)) ниже скрипт))
так в виндовс разделитель \ а в остальных /
8.
Артур (26.01.2014 / 21:36)
винда нормуль работает и с / на сколько я помню
И что я должен увидеть в этом архиве?
Добавлено через 03:38 сек.
Подозреваю что у тебя там рекурсивная ссылка, от того и повисает
9.
KpuTuK (26.01.2014 / 21:40)
8.
Башка, то что лишнего там нет ничего))
Значит хомяк чтото подключает....
10.
Артур (26.01.2014 / 21:42)
Я не хочу у себя запускать твой скрипт, но тебе посоветовал бы написать в функции автоподключения:
function custom_autoload($className) {
$path = str_replace('\\', DIRECTORY_SEPARATOR, $className).'.php';
echo $path;
require_once($path);
}
11.
KpuTuK (26.01.2014 / 21:45)
10.
Башка,
var_dump($path);
string(24) "system/classes/Route.php"
все ок... класс Route пуст
12.
Артур (26.01.2014 / 21:56)
не ну мало просто require_once("system/classes/Route.php"), там же еще нужен корень системы, что то типа "/var/www/site.com/system/classes/Route.php"
Добавлено через 02:00 сек.
да и не может там быть "system/classes/Route.php", должно быть как минимум "/system/classes/Route.php" так как ns в php всегда начинается с \
13.
KpuTuK (26.01.2014 / 22:06)
12.
Башка, это смотря как вызывать видимо...
use system\classes\Route;
new Route();
попробовал просто
spl_autoload_register(function ($class) {
});
тоже самое выдало... Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 2619244433 bytes) in /var/www/kputu258/data/www/srv16.ru/system/CodeMania.php on line 17
php 5.4.23 сменил на 5.5.7 и все ок... видимо в самом php чтото...
URL:
https://visavi.net/topics/39972