我正在寻找一种将类加载到PHP中而不使用硬连接名称的方法。从字符串中加载PHP类
这个想法是脚本将加载一个名称为“组件”(类)的文本文件,然后通过文件中的名称加载它们。例如:
<xml><Classes><class name="myClass"/></Classes></xml>
当PHP运行时,它需要做这样的事情:
require_once {myClass}".class.php";
var myclass = new {myClass}();
我正在寻找一种将类加载到PHP中而不使用硬连接名称的方法。从字符串中加载PHP类
这个想法是脚本将加载一个名称为“组件”(类)的文本文件,然后通过文件中的名称加载它们。例如:
<xml><Classes><class name="myClass"/></Classes></xml>
当PHP运行时,它需要做这样的事情:
require_once {myClass}".class.php";
var myclass = new {myClass}();
require_once $class . ".class.php";
$myclass = new $class;
见http://www.php.net/manual/en/language.oop5.basic.php#language.oop5.basic.new。
你的例子几乎是正确的。你可以用$ myClass替换{myClass},它应该可以工作。
这里有一个如何这可以使用一个简单的例子:
File: myClass.class.php
<?php
class myClass {
public $myVar = 'myText';
}
?>
File: test.php
<?php
$className = "myClass";
require_once $className . ".class.php";
$myInstance = new $className;
echo $myInstance->myVar;
?>
这应该输出“会将myText”到屏幕上,您的动态包含类属性的内容。
为此使用ReflectionClass。
require_once $class . ".class.php";
$refl = new \ReflectionClass($class);
$params_for_construct = array($param1, param2);
$instance = $refl->newInstanceArgs($params_for_construct);
为什么不使用自动加载
spl_autoload_register(function ($class) {
require 'class_folder/' . $class . '.class.php';
});
另外,如果你需要拉从XML类的名称,你可以做的尽可能简单地调用一个简单的[的preg_match()](HTTP ://us2.php.net/manual/en/function.preg-match.php)。 如果您想详细说明该主题,请留言。 – 2011-12-15 06:56:41