PHP 阻止标准实例化 class

PHP prevent instantiation of standard class

(这只是理论问题,并不是为了作为一个很好的例子)

假设我写了某种 orm,所有开发人员都应该使用这个 class,是否可以禁止在 php 中实例化某些标准 class,以确保不会与此数据库建立其他连接吗?

例如mysqli应该是构建不出来的

这个技术可行吗?

谢谢

有几种方法

...但是 none 是完美的。

简单的方法

如果您不想让任何人实例化 mysql/imongodb 或类似的东西,您只需卸载扩展程序即可。那么您的 ORM 将需要使用另一个连接 class。

骇人听闻的方式

有一个名为 runkit 的不错的扩展,它包含了您永远不应使用的所有功能。可以从 classes 中删除方法,这样您就可以覆盖要阻止的 class 的构造函数。我需要指出这是一个 真的 坏主意吗?

好方法

... 是代码审查。您可能认为这些并没有真正阻止某人使用 mysqli,但是:

  • 你不需要通过规避 ORM 做比你的同行更糟糕的事情。
  • 您知道谁尝试过并且能够向他们解释为什么他们不应该这样做。
  • 您实际上可以使用 class。您可能认为现在您永远不需要它,但也许您的紧急记录器不应该依赖于您的 ORM。哦,顺便说一下,您的 ORM 也需要使用它。

TL;DR

正确检查您的代码。无论如何,它是良好编码风格的一部分,可以防止不良解决方案强制实施良好解决方案,并在需要时允许例外情况。