我正在尋找一種將類加載到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