【问题标题】:php: how to implement namespace in this structurephp:如何在这个结构中实现命名空间
【发布时间】:2012-01-28 13:03:58
【问题描述】:

这是我的 php 文件夹/文件结构:

mvc
    controller
        login.class.php
    model
        login.class.php
lib
    login.class.php
core
    controller.class.php
    model.class.php
    core.class.php

core.class.php 代码

<?php
class core
{
    public static function load()
    {
        require_once('lib.class.php');
        require_once('controller.class.php');
        require_once('model.class.php');
    }
}
core::load();
?>

我不知道在哪里设置命名空间来做这样的事情:

\LIB\login.class.php
\CONTROLLER\login.class.php
\MODEL\login.class.php

谢谢你:)

【问题讨论】:

    标签: php namespaces


    【解决方案1】:

    您必须将命名空间定义为每个文件中的第一条语句 (namespace my\namespace;)。当命名空间与文件夹匹配时,您可以使用以下自动加载器自动加载所需的文件:

    spl_autoload_register(function ($className) {
        $namespaces = explode('\\', $className);
        if (count($namespaces) > 1) {
            $classPath = APPLICATION_BASE_PATH . implode('/', $namespaces) . '.class.php';
            if (file_exists($classPath)) {
                require_once($classPath);
            }
        }
    });
    

    【讨论】:

    • 我不喜欢自动加载器...另一种方式我有一个错误,我在第一行使用命名空间,但是我不能实例化 CORE 类,如新的 DOMDocument 等...致命错误:类'LIB\DOMDocument' 未找到,如何在命名空间文件中使用核心类?
    【解决方案2】:

    命名空间声明位于文件顶部:

    <?php
    namespace Foo;
    

    【讨论】:

      【解决方案3】:
      mvc
          controller
              login.class.php
          model
              login.class.php
      lib
          login.class.php
      
      index.php
      

      mvc/controller/login.class.php

      <?php
      namespace controller;
      require_once('mvc/model/login.class.php');
      class login
      {
          public function __construct()
          {
              $login = new \model\login();
          }
      }
      ?>
      

      mvc/model/login.class.php

      <?php
      namespace model;
      require_once('lib/login.class.php');
      class login
      {
          public function __construct()
          {
              $login = new \lib\login();
          }
      }
      ?>
      

      lib/login.class.php

      <?php
      namespace lib;
      
      class login
      {
          public function __construct()
          {
              // core class instance
              $login = new \DOMDocument();
          }    
      }
      ?>
      

      index.php

      <?php
      require_once('mvc/controller/login.class.php');
      
      $login = new \controller\login();
      ?>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-05-22
        • 2010-10-10
        • 1970-01-01
        • 2013-09-03
        • 1970-01-01
        • 2014-10-27
        • 1970-01-01
        相关资源
        最近更新 更多