使用字符串创建 PHP 类实例

php
2022-08-30 06:09:41

我有两个类,和.我得到的字符串可以是或 。class ClassOne { }class ClassTwo {}"One""Two"

而不是使用长语句,例如:switch

switch ($str) {
    case "One":
        return new ClassOne();
    case "Two":
        return new ClassTwo();
}

有没有办法使用字符串创建实例,即?new Class("Class" . $str);


答案 1

是的,你可以!

$str = 'One';
$class = 'Class'.$str;
$object = new $class();

使用命名空间时,请提供完全限定的名称

$class = '\Foo\Bar\MyClass'; 
$instance = new $class();

你可以在php中做的其他很酷的东西是:
变量变量:

$personCount = 123;
$varname = 'personCount';
echo $$varname; // echo's 123

以及可变函数和方法。

$func = 'my_function';
$func('param1'); // calls my_function('param1');

$method = 'doStuff';
$object = new MyClass();
$object->$method(); // calls the MyClass->doStuff() method. 

答案 2

您只需使用以下语法即可创建新类(如果要创建工厂,这很方便):

$className = $whatever;
$object = new $className;

作为一个(非常粗糙的)示例工厂方法:

public function &factory($className) {

    require_once($className . '.php');
    if(class_exists($className)) return new $className;

    die('Cannot create new "' . $className . '" class - includes not found or class unavailable.');
}

推荐