php - 在 PHP 中使用动态变量实例化对象的含义

标签 php performance oop

使用以下形式在 PHP 中声明新类实例的性能、安全性或“其他”含义是什么

<?php
  $class_name = 'SomeClassName';
  $object = new $class_name;
?>

这是一个人为的例子,但我已经看到这种形式在工厂 (OOP) 中使用,以避免有一个大的 if/switch 语句。

首先想到的问题是

  1. 你失去了将参数传递给构造函数的能力(谎言。谢谢 Jeremy)
  2. 闻起来像 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/

相关文章:

php - 克莱因系统。 CSS 不工作

javascript - 在 JavaScript 中使用 switch 语句性能运行函数

c++ - 在创建结构时修改类私有(private)成员 (C++)

java - 这段代码示例中 static 有什么用?

php - MYSQL 根据多行从表中选择

php - 清理 URL 和数据库

php - 远程 JSON 数据源的 JQuery 自动完成功能不起作用

c++ - 使用 Opencv C++ 对循环进行矢量化

performance - 使用 1 的步幅对今天的 vDSP 性能仍然至关重要吗?

oop - 纯组合会破坏 OOP 概念吗?