小编Pau*_*hev的帖子

PHP。我可以让反射使用自动加载吗?

我需要用反射实例化很多类。有不同的命名空间具有名称相同但参数不同的特殊类。

每个命名空间都包含 Super 类,它们以相同的方式运行其他特殊类 - 反射。

我可以向超类添加参数,我应该使用什么命名空间,但如果我在use我的文件部分包含我想在反射中使用的所有类,会更舒服。

有任何想法吗?

示例(我想要):

use Namespace1\Class1;
use Namespace1\Class2;
use Namespace2\Class1; // same name as in Namespace1


class Management {
   public function run()
   {
      // ...some inits with a lot of params which I pass through __constructor

      $needClassName = $this->getClassName(); // should be Class1, Class2

      $reflect = new \ReflectionClass($needClassName);
      $manager = $reflect->newInstance($user, $database, $errors);
   }
}
Run Code Online (Sandbox Code Playgroud)

php reflection

6
推荐指数
0
解决办法
495
查看次数

PHP7.反射不适用于旧版本的PHP

我有一个php脚本,写在php 5.6.19上,适用于5.3版本,有一些已安装的插件.

我决定尝试在php7上执行它.

通过创建新实例,我通过引用初始化类的脚本的特殊性Reflection::class.然后有警告等待参考变量但收到的价值.

尝试从以下位置创建实例的类'构造函数方法的定义:

public function __construct($user, IDatabase &$repository, $errors = null);
Run Code Online (Sandbox Code Playgroud)

使用此构造函数的代码示例:

// define manager type to create (all managers has the same constructor)
$manager = $managersNamespace . ucfirst($this->_manager) . "Manager";
// trying to create the manager
// !!!And here a Warning occurs
$reflect = new \ReflectionClass($manager);
$manager = $reflect->newInstance($user, $database, $errors);
Run Code Online (Sandbox Code Playgroud)

在这些之后我调用了一个我需要的方法,这里停止了脚本的致命错误:

$method = "show" . ucfirst($this->_page) . "Page";
$reflect->getMethod($method)->invoke($manager);
Run Code Online (Sandbox Code Playgroud)

我没有看到文档有任何变化.有人有同样的问题吗?

reflection php-7

0
推荐指数
1
解决办法
517
查看次数

标签 统计

reflection ×2

php ×1

php-7 ×1