2013-06-05 3 views
0

Я пытаюсь обновить код нового проекта, над которым я работаю, чтобы соответствовать PSR-0.PHP OOP автозагрузку классов namespaces вопрос

Я использую и класс загрузчика SPL. Однако я могу делать что-то неправильно, я просто не могу понять, в чем проблема.

я получаю следующее сообщение об ошибке:

Fatal error: Class 'widezike\General' not found in /nfs/c03/h04/mnt/169128/domains/widezike.com/html/beta/lib/functions.php on line 14 

Это моя структура папок:

index.php 
-lib 
config.php 
init.php 
spl-class-loader.php 
functions.php 
    -widezike 
     -General.php 

Это мои функции файл, где он начинает что-то делать с на стороне сервера код:

<?php 

include 'init.php'; 
include 'config.php'; 

include 'spl-class-loader.php'; 

$loader = new SplClassLoader('General', 'lib/widezike'); 
$loader->register(); 

use widezike\General; 

//Run the output buffer 
General::ob(); 

Так что это мой код на данный момент, но я не могу найти, что вызывает фатальную ошибку ...

Заранее спасибо

+0

Вы можете написать сообщение об ошибке? –

+0

Ошибка находится прямо вверху, Fatal Error: class 'widezike' и т. Д. –

+0

Можем ли мы увидеть самозагрузчик? – Leri

ответ

1

Я беру немного догадки, но я думаю, что этот вопрос находится в конструкторе ..

$loader = new SplClassLoader('General', 'lib/widezike'); 

В коде вы linked to они являются пространством имен и включить путь.

Играйте с ними до тех пор, пока это не будет работать, я могу только предложить.

Вы можете попробовать:

$loader = new SplClassLoader(null, 'lib'); 

Или

$load = new SplClassLoad('General', 'lib'); 

С другой стороны, я лично просто использовать очень простую функцию spl_autoload_register сделать мой класс нагрузки для меня ..

spl_autoload_register(function($class){ 

    $filename = str_replace('\\', '/', $class) . '.php'; 
    require($filename); 

}); 

$object = new phutureproof\common\whatever(); 

Тогда у меня был бы файл /phutureproof/common/whatever.php с содержанием:

<?php 
namespace phutureproof\common; 

class whatever 
{ 

} 
+0

Спасибо, я думаю, что это может быть другая проблема, я попробовал ваш автозагрузчик, и у меня такая же проблема, как-то я думаю PHP не разделяет имя класса и пытается буквально загрузить класс под названием: widezike \ General. Используя ваш метод, я получил следующее: lib/widezike/general.php Неустранимая ошибка: класс 'lib \ widezike \ General' не найден в /nfs/c03/h04/mnt/169128/domains/widezike.com/html/beta/ lib/functions.php в строке 20 Я сделал это, чтобы напечатать сгенерированный include, чтобы убедиться, что он создавал правильную вещь, и это: S, поэтому я заблокирован –

+0

, вы помещаете правильное пространство имен в свои классы? 'namespace lib \ widezike; класс General {} ' – Dale

+0

Yup that's in there –

0

Я понял, что проблема в том, что мои пространства имен были неправильными, поэтому, если у вас есть такая же проблема, просто проверьте и убедитесь, что ваши пространства имен верны!

Смежные вопросы