Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/244.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用变量动态定义PHP类_Php_Class_Oop_Variables_Object - Fatal编程技术网

使用变量动态定义PHP类

使用变量动态定义PHP类,php,class,oop,variables,object,Php,Class,Oop,Variables,Object,我想创建一个我不知道名称的类。在PHP中实现以下场景的最佳方法是什么 $class_name = 'SomeClassName'; $code = "class {$class_name}_Control extends WP_Customize_Control {}"; eval( $code ); 谢谢。我刚刚测试了这个,效果很好。如果你只是暂时需要这个类,你可以在底部抛出一个unlink()。不需要exec() <?php // your dynamic classname $f

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

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

谢谢。

我刚刚测试了这个,效果很好。如果你只是暂时需要这个类,你可以在底部抛出一个
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);

我刚刚测试了这个,效果很好。如果你只是暂时需要这个类,你可以在底部抛出一个
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);

看看这个->@Jesse如果我没弄错的话,你引用的例子展示了如何从一个已经存在的类实例化一个对象。我的班级还不存在。我想动态地创建它。在那个场景中,你做它的方式就是我能告诉你的方式。看下面的第三个答案,依此类推。大家的共识是评估->@Jesse,谢谢你帮我找到解决方案。我想我必须再搜索一段时间,然后才能屈服于这种方法。我不能说我是我正在看的东西的忠实粉丝,必须有更好的方法。同意。研究没有错,应该始终检查更好的评估方法。我+1d并在这篇文章中加了一个星号,因为我很好奇是否有人提出了一个不使用eval的答案。请看这个->@Jesse如果我没有弄错的话,您引用的示例演示了如何从已经存在的类实例化一个对象。我的班级还不存在。我想动态地创建它。在那个场景中,你做它的方式就是我能告诉你的方式。看下面的第三个答案,依此类推。大家的共识是评估->@Jesse,谢谢你帮我找到解决方案。我想我必须再搜索一段时间,然后才能屈服于这种方法。我不能说我是我正在看的东西的忠实粉丝,必须有更好的方法。同意。研究没有错,应该始终检查更好的评估方法。我+1d并在这篇文章中加了星星,因为我很好奇是否有人提出了一个不使用eval的答案。谢谢你的建议,但你的方法比我的更糟糕(双关语)。heredoc语法使编写类变得更容易,但也为错误打开了更多的空间。公平地说,考虑到您所面临的安全风险,无论您是否使用
eval
,动态创建类通常都是相当糟糕的。祝你好运找到你喜欢的东西。谢谢你的建议,但是你的方法比我的更糟糕(双关语)。heredoc语法使编写类变得更容易,但也为错误打开了更多的空间。公平地说,考虑到您所面临的安全风险,无论您是否使用
eval
,动态创建类通常都是相当糟糕的。祝你好运找到你喜欢的东西。