首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用字符串创建PHP类实例

使用字符串创建PHP类实例
EN

Stack Overflow用户
提问于 2011-01-02 20:21:42
回答 4查看 214.9K关注 0票数 249

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

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

代码语言:javascript
复制
switch ($str) {
    case "One":
        return new ClassOne();
    case "Two":
        return new ClassTwo();
}

有没有一种方法可以使用字符串创建实例,即new Class("Class" . $str);

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-01-02 20:23:37

可以,停那儿吧!

代码语言:javascript
复制
$str = 'One';
$class = 'Class'.$str;
$object = new $class();

使用命名空间时,请提供fully qualified name

代码语言:javascript
复制
$class = '\Foo\Bar\MyClass'; 
$instance = new $class();

你可以在php中做的其他很酷的事情有:

Variable variables

代码语言:javascript
复制
$personCount = 123;
$varname = 'personCount';
echo $$varname; // echo's 123

和可变函数和方法。

代码语言:javascript
复制
$func = 'my_function';
$func('param1'); // calls my_function('param1');

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

Stack Overflow用户

发布于 2011-01-02 20:24:57

您可以简单地使用以下语法来创建一个新类(如果您正在创建一个factory,这将非常方便):

代码语言:javascript
复制
$className = $whatever;
$object = new $className;

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

代码语言:javascript
复制
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.');
}
票数 24
EN

Stack Overflow用户

发布于 2011-01-02 20:24:37

看一下来自http://www.php.net/manual/en/language.oop5.basic.php的示例3

代码语言:javascript
复制
$className = 'Foo';
$instance = new $className(); // Foo()
票数 14
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4578335

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档