Не удается создать объект в классе пространства имен

У меня есть что-то вроде структуры

namespace Html;  

class MyHtml extends Fuel\Core\Html {
        private $table = null;

        public function __construct($table) {
            $this->table = $table;
        }

        public function textarea() { 

        }
    ...

По моему шаблону

<article class="modal hide fade" id="add-journal">
                <section class="modal-header">Add Journal</section>
                <section class="modal-body">
                    <?php 
                        $form = new Html\MyHtml('form-item');
                        ...other code...
                    ?>
                </section>
                <section class="modal-footer"></section>
            </article>

Я получаю эту ошибку:

ErrorException [ Error ]: Class 'Html\MyHtml' not found

Это может быть не столько вопрос топлива, сколько вопрос PHP. Означает ли это, что я не могу создавать объекты на основе своего класса, если он находится в пространстве имен? Должен ли я предоставить статическую функцию для этого?

Благодарю.

3 ответа

Вы должны использовать $form = new \Html\MyHtml('form-item');,

\ означает, что вы начинаете с корня. Если вы не начинаете с корня, вы ищете Html\MyHtml из пространства имен, частью которого является шаблон.

Кроме того, убедитесь, что класс загружается с помощью автозагрузчика или require_once,

Вы создаете свой объект с относительным путем к пространству имен.

Используйте абсолютный путь к пространству имен:

 $form = new \Html\MyHtml('form-item');

И, конечно же, ваш автозагрузчик должен автоматически включать ваш файл. Если у вас нет автозагрузчика, обязательно включите файл:

include_once 'path_to_your_class/your_classfile.php';
$form = new \Html\MyHtml('form-item');

Виды FuelPHP анализируются в глобальном пространстве имен, поэтому в данном конкретном случае должен работать Html\MyHTML.

Большой вопрос в том, где вы создали этот класс, и, поскольку он использует нестандартное именование классов, вы добавили его в начальную загрузку? Автозагрузчик FuelPHP чувствителен к регистру, поэтому он будет искать класс Myhtml...

Второй вопрос: мне интересно, что именно ты пытаешься сделать? HTML-класс FuelPHP является статическим вспомогательным классом, создавать его экземпляры довольно бессмысленно, поскольку он содержит только статические методы...

Другие вопросы по тегам