使用以下形式在 PHP 中声明新类实例的性能、安全性或“其他”含义是什么
<?php
$class_name = 'SomeClassName';
$object = new $class_name;
?>
这是一个人为的例子,但我已经看到这种形式在工厂 (OOP) 中使用,以避免有一个大的 if/switch 语句。
首先想到的问题是
你失去了将参数传递给构造函数的能力(谎言。谢谢 Jeremy)- 闻起来像 eval(),它带来了所有安全问题(但不一定是性能问题?)
还有什么其他含义,或者除了“Rank PHP Hackery”之外还有哪些搜索引擎术语可以用来研究这个?
最佳答案
在运行时解析的问题之一是你让操作码缓存(如 APC)变得非常困难。不过,就目前而言,如果您在实例化内容时需要一定程度的间接访问,那么像您在问题中描述的那样做是一种有效的方法。
只要你不做类似的事情
$classname = 'SomeClassName';
for ($x = 0; $x < 100000; $x++){
$object = new $classname;
}
你可能很好:-)
(我的意思是:在这里动态地查找一个类然后不会有什么坏处。如果你经常这样做,它就会)。
此外,请确保永远不能从外部设置 $classname - 您希望对要实例化的确切类有一些控制。
关于php - 在 PHP 中使用动态变量实例化对象的含义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48009/