Не удается создать объект в классе пространства имен
У меня есть что-то вроде структуры
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 является статическим вспомогательным классом, создавать его экземпляры довольно бессмысленно, поскольку он содержит только статические методы...