我在一个文件中有一些类,它们与类本身同名。我想动态加载给定名称的相关文件并返回类对象,但我只有文件/类名存储在变量中。怎么可能?
public function loadClass($name) {
include dirname(__FILE__) . '/classes/' . $name . '.php';
return $name;
}
答案 0 :(得分:1)
试试这个,您可以使用Autoloading
function __autoload($name) {
include dirname(__FILE__) . '/classes/' . $name . '.php';
}
你可以称你为班级,
$obj = new MyClass1();
答案 1 :(得分:1)
你应该这样做:
//test.php
class test {
public function shout() {
echo "Hello world!";
}
}
//main file
function loadClass($name) {
include(dirname(__FILE__) . '/classes/' . $name . '.php');
return new $name();
}
$class = loadClass('test');
$class->shout(); //prints Hello World!
对于静态方法,请执行以下操作:
//test.php
class test {
static function shout() {
echo "Hello world!";
}
}
//main file
function loadClass($name) {
include(dirname(__FILE__) . '/classes/' . $name . '.php');
$name;
}
$class = loadClass('test');
$class::shout(); //prints Hello World!
答案 2 :(得分:1)
<?php
spl_autoload_register(function ($name) {
$path = __DIR__ . '/classes/' . $name . '.php';
if (is_file($path)) {
require $path;
}
});
__DIR__
相当于dirname(__FILE__)
。多个功能被处理为队列,而非Stack。
<?php
spl_autoload_register(function ($name) {
$path = __DIR__ . '/classes1/' . $name . '.php';
if (is_file($path)) {
require $path;
}
});
spl_autoload_register(function ($name) {
$path = __DIR__ . '/classes2/' . $name . '.php';
if (is_file($path)) {
require $path;
}
});
$foo = new Foo('bar');
./classes1/Foo.php
存在...... $path
将在第一个函数中为./classes1/Foo.php
。require $path
将被调用。./classes2/Foo.php
存在...... $path
将在第一个函数中为./classes1/Foo.php
。require $path
将被跳过。$path
将在第一个函数中为./classes2/Foo.php
。require $path
将被调用。答案 3 :(得分:1)
您可以使用$name
变量实例化该类的新实例:
public function loadClass($name)
{
include dirname(__FILE__) . '/classes/' . $name . '.php';
return new $name();
}