【问题标题】:"New class extends" with a name from variable“新类扩展”,名称来自变量
【发布时间】:2018-08-14 23:52:09
【问题描述】:

是否可以使用变量而不是名称来创建类?

代替:

class weirdclassname extends WP_widget { .... }

我想:

class $nameVariable extends WP_widget { .... }

我需要它,因为我创建了多个类并且必须发明许多不同的唯一名称来防止冲突。我的想象力已经在哭了=|

【问题讨论】:

  • 类传统上描述对象。如果您的所有对象都相同,那么您不需要创建新类而是创建对象。无论如何,变量除了名称之外还存储什么?
  • 没有。如果您尝试做自己想做的事情,那么您的架构就很糟糕。
  • 这就是 PHP 中有namespace 的原因。帮助避免名称冲突。
  • |>“你不需要创建一个新类” - 似乎我必须这样做,因为 Wordpress 插件开发规则需要它; |>“架构不好” - wordpress,wordpress.. |>“命名空间” - 是的,但 wordpress 喜欢全局变量 =|

标签: php class variables extends


【解决方案1】:

您可以使用函数eval动态定义类https://implode.io/uP0WXH

class Foo
{
}

$child = <<<CLASS
class %s extends Foo
{
    public \$name = '%s';
}
CLASS;

$classNames = ['Class1', 'Class2', 'Class3'];

foreach ($classNames as $className) {
    eval(sprintf($child, $className, $className));
}

print_r(new Class1);

print_r(new Class2);

print_r(new Class3);

【讨论】:

  • 我已经阅读了有关 eval 的内容,并打算回答“eval?不,谢谢,这是一个糟糕的认识”,但是您的回答令人震惊,伙计,而且看起来很不错。非常感谢!
猜你喜欢
  • 2014-09-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-10
相关资源
最近更新 更多