【问题标题】:Dynamically define PHP class using a variable使用变量动态定义 PHP 类
【发布时间】:2015-12-24 13:32:00
【问题描述】:

我想创建一个我不知道名称的类。在 PHP 中完成以下场景的最佳方法是什么?

$class_name = 'SomeClassName';
$code = "class {$class_name}_Control extends WP_Customize_Control {}";
eval( $code );

谢谢。

【问题讨论】:

  • @Jesse 如果我没记错的话,您引用的示例显示了如何从已经存在的类中实例化对象。我的班级还不存在。我想动态创建它。
  • 在那种情况下,你做这件事的方式就是我所知道的。之后查看第三个答案,依此类推。对此的普遍共识是 eval -> stackoverflow.com/questions/1203625/…
  • @Jesse,感谢您帮助我找到解决方案。我想在我屈服于这种方法之前,我必须再搜索一段时间。我不能说我是我所看到的东西的忠实粉丝,必须有更好的方法。
  • 同意。研究并没有错,应该始终检查更好的评估方法。我 +1d 并为这篇文章加注了星标,因为我很好奇是否有人提出了不使用 eval 的答案。

标签: php class oop variables object


【解决方案1】:

我刚刚对此进行了测试,它工作正常。如果你只是暂时需要这个课程,你总是可以在底部扔一个unlink()。不需要exec()

<?php

// your dynamic classname
$fart = "poot";

// define your class, don't forget the "<?php"
$class = <<<YOYOYOHOMIE
<?php
class $fart{
    public \$poop = "poop";
}
YOYOYOHOMIE;

// write the class to a file.
$filename = "dynamicClass".time().".php";
$fh = fopen($filename,"w+");
fwrite($fh, $class);
fclose($fh);

// require the file
require $filename;

// now your dynamically generated class is available
$tird = new $fart;
echo "<pre>";
var_dump($tird);

【讨论】:

  • 感谢您的建议,但您的方法比我的更糟糕(双关语)。 heredoc 语法使编写类更容易一些,但为错误打开了更多空间。
  • 好吧,公平地说,考虑到您所承担的安全风险,无论您是否使用eval,动态创建一个类通常看起来很糟糕。祝你好运找到你喜欢的东西。
猜你喜欢
  • 2023-03-17
  • 1970-01-01
  • 1970-01-01
  • 2011-01-16
  • 1970-01-01
  • 1970-01-01
  • 2015-01-24
  • 2016-04-23
  • 2014-10-17
相关资源
最近更新 更多