PHP在另一个名称空间的类中使用名称空间类内部方法

时间:2014-01-14 12:24:25

标签: php class namespaces instantiation

是否有可能以某种方式在另一个名称空间内的另一个类中的方法中实例化名称空间内的类?并且从变量?

实例化请求的类

示例

要从loader-class 加载的类:

namespace application/pages;

class loader
{
    private function __construct()
    {
        echo 'Class loaded...';
    }
}

装载机级

namespace system/loader;

class loader
{
    private $vars;

    private function __construct($vars)
    {
        $this->vars = $vars;
    }

    private function load_class()
    {
        require(CLASSES . $this->vars['namespace'] . '/' . $this->vars['class'] . ".php");

        use $this->vars['namespace'];
        return new \$this->vars['namespace']\$this->vars['class']();
    }
}

对于有点令人困惑的表述感到抱歉,但我想不出更好的方式来提问。

感谢。

1 个答案:

答案 0 :(得分:1)

这是加载命名空间的一般方法: http://www.php.net/manual/en/function.spl-autoload.php

然而,有一种更流行的方法是使用Composer

  1. 下载composer.phar并在项目目录中运行:php composer.phar init
  2. 跟随互动。
  3. 在项目根目录中,创建一个src目录,然后将其添加到生成:"autoload": { "psr-0": { "": "src/" } }
  4. 的composer.json文件中

    您的composer.json文件现在应如下所示:

    {
        "name": "acme/sample",
        "authors": [
            {
                "name": "Person",
                "email": "person@example.com"
            }
        ],
        "minimum-stability": "dev",
        "autoload": {
            "psr-0": { "": "src/" }
        },
        "require": {
    
        }
    }
    
    1. 运行:php composer.phar install,它将生成供应商目录和自动加载脚本。

    2. 创建主要加载php文件并在其中包含autoload.php文件。

    3. 现在,src目录中的命名空间和供应商中的任何导入库都将公开给您的应用程序。

      结帐symfony/symfony-standard以查看完整的框架示例。