【问题标题】:Dynamically load class by name in Zend 2在 Zend 2 中按名称动态加载类
【发布时间】:2016-06-28 12:14:18
【问题描述】:

我目前正在尝试通过名称获取类的实例。我有一个控制器,在这个控制器中,我想通过 类名 获取一个类的实例。我知道该类将位于命名空间 MyModule\Entity

使用 Zend 2 动态创建类实例的最佳方法是什么?

namespace MyModule\Controller;

class MyController extends AbstractActionController {

public function indexAction() {
    $className = "myclass"; // File myclass.php
    $class = ??? // create instance by $className
    $class->process();
}

【问题讨论】:

    标签: php zend-framework2 autoload


    【解决方案1】:

    在 ZF1 中我会这样做

    $class = new MyModule_Entity_Classname();
    

    我不知道这在 ZF2 中是否有所改变。

    【讨论】:

    • 这在 ZF2 中仍然有效。但我不确定这是否是实现这一目标的最佳方法!?
    • 也可以放一个“use MyModule\Entity\Classname as Classname;”在控制器的开头,然后只需执行 $class= new Classname();
    • 但这有点太多了,因为如果我将有 100 个或更多不同的类需要加载,具体取决于类名。这就是为什么我想动态加载类。
    • 哇,这太多了!如果这是您的第一个问题,我认为 $classname = "MyModule\Entity\Classname"; $class = new $classname; 有效
    【解决方案2】:

    如果您使用 composer 并且配置正确,您可以使用:

    $class = new $className;
    

    $className 应该是类的全名,例如\MyModule\MyClass

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-09
      • 2018-01-15
      • 1970-01-01
      • 2012-09-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多