无法在命名空间类中创建对象

时间:2012-10-25 08:03:44

标签: php namespaces fuelphp

我有类似这样的结构

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 个答案:

答案 0 :(得分:1)

您正在使用相对命名空间路径创建对象。

使用名称空间的绝对路径:

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

当然,您的自动加载器需要自动包含您的文件。如果您还没有自动加载器,请确保包含以下文件:

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

答案 1 :(得分:1)

您应该使用$form = new \Html\MyHtml('form-item');

\表示您从根开始。如果您不从根开始,则从模板所属的命名空间中搜索Html\MyHtml

此外,请确保使用自动加载器或require_once加载类。

答案 2 :(得分:0)

FuelPHP视图在全局命名空间中解析,因此在这种特定情况下,Html \ MyHTML应该可以工作。

最大的问题是你在哪里创建了这个类,并且由于它使用的是非标准类命名,你是否将它添加到引导程序中? FuelPHP的自动加载器区分大小写,因此它将查找Myhtml类...

第二个问题是我想知道你究竟想做什么? FuelPHP的HTML类是一个静态助手类,实例化它是毫无意义的,因为它只包含静态方法......