繁体   English   中英

如果我可以动态访问类代码,PHP可以创建该类的对象吗?

[英]PHP can I create an object of the class if I dynamically have access to the codes of class?

这有点奇怪,但是我想创建一个存储在另一个文件中的类的对象,我有文件的路径,但没有类的名称。 场景是,目录中存储了许多文件,每个文件仅包含一个类。 在此目录之外的是另一个文件,在该文件中,我正在开发一个函数,该函数采用文件名,访问文件并从中获取代码,然后在该文件中创建该类的对象并返回该对象。 我确信这是有可能的,但无法使其正常工作。 有谁能够帮助我 ?

在使用array_diff()包含文件之前和之后比较get_declared_classes()的结果:

<?php

  $before = get_declared_classes();
  include_once('path/to/file');
  $after = get_declared_classes();

  $newClasses = array_diff($after, $before);

  for ($i = 0; isset($newClasses[$i]); $i++) {
    ${'class'.$i} = new $newClasses[$i];
    echo "New class $newClasses[$i] instantiated in variable \$class$i\n";
  }

您可以使用get_declared_classes()

例如:

$klass = end(get_declared_classes());
$obj = new $klass;

这很简单,但不是很安全。

1.将源文件加载为文本,匹配正则表达式的内容,该正则表达式将以$ classname返回类的名称。

2.根据源代码文本进行任何必要的检查,以确保在“加载过程”中需要此类,例如提取构造函数参数。

  1. require_once('the_file.php')

  2. $ my_new_instance = new $ classname()(假设您没有构造函数参数)或$ my_new_instance = new $ classname($ param1,$ param2),前提是您已从源分析阶段提取了参数$ param1,$ param2。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM