我想问一个关于服务器性能的菜鸟问题。
假设每个类包含 1000 个具有相同性能的行代码。
如果我想使用一个属于另一个的功能。我发现有 3 种方法可以做到这一点。
- 课内
$this->Another_Class = new Another_Class
- 使用静态
Another_Class::Wanted_Function()
- 全球的
global $Another_Class
请问在服务器性能方面,它们是一样的吗?还是除了魔术电话我还有其他选择吗?
我想问一个关于服务器性能的菜鸟问题。
假设每个类包含 1000 个具有相同性能的行代码。
如果我想使用一个属于另一个的功能。我发现有 3 种方法可以做到这一点。
$this->Another_Class = new Another_Class
Another_Class::Wanted_Function()
global $Another_Class
请问在服务器性能方面,它们是一样的吗?还是除了魔术电话我还有其他选择吗?
应始终避免使用全局变量,并且通常也应避免使用静态变量,除非确实有必要,因为它们不利于代码重用。
此外,您可能想看看控制反转和依赖注入等概念。简而言之,您不应该在类中实例化依赖项,而是注入它。
简单的例子:
class Example
{
protected $foo;
public function setFoo($foo)
{
$this->foo = $foo;
}
public function doSomething()
{
$this->foo->callFooMethod();
}
}
$example = new Example();
$example->setFoo(new Foo);
$example->doSomething();
我强烈建议您不要将全局变量用于任何事情。
至于是使用静态类还是实例化类……这完全取决于您要做什么。静态成员函数本质上与能够访问其他静态成员函数/变量的命名空间函数相同。
实例化一个类在技术上比访问一个静态类要慢,但只有在 __construct() 和类变量初始化发生时运行逻辑时才会出现这种情况。