Php 在OOP中调用函数的速度慢还是开销大?

Php 在OOP中调用函数的速度慢还是开销大?,php,oop,Php,Oop,我正在构建一个应用程序,该应用程序对函数进行了大量重复 例如: $Class = new Class; for($i; $i < 1000; $i++) { $Class->get_something(); } $Class=新类; 对于($i;$iget_something(); } 我读过很多关于OOP的文章,以及为什么它很慢,但我仍然不明白“慢”的部分到底在哪里。人们一直在使用世界“开销”,这是在加载实际的类吗?一旦我需要一个类,现在调用函数或变量的速度是一样的吗?

我正在构建一个应用程序,该应用程序对函数进行了大量重复

例如:

$Class = new Class;
for($i; $i < 1000; $i++) {
    $Class->get_something();
}
$Class=新类;
对于($i;$i<1000;$i++){
$Class->get_something();
}

我读过很多关于OOP的文章,以及为什么它很慢,但我仍然不明白“慢”的部分到底在哪里。人们一直在使用世界“开销”,这是在加载实际的类吗?一旦我需要一个类,现在调用函数或变量的速度是一样的吗?

你触及了一个非常古老的争论:是通过一个大的查询来获取数据,还是通过多个小的查询来接收数据。
答案在于实现的细节。在某些情况下,反复调用一个函数会更快,而在其他情况下,它只会降低性能。反复调用函数的“开销”非常小,重要的是函数的“胆量”。

您触及的是一个非常古老的争论,是通过一个大的查询来获取数据,还是通过多个小的查询来接收数据。
答案在于实现的细节。在某些情况下,反复调用一个函数会更快,而在其他情况下,它只会降低性能。反复调用函数的“开销”非常小,关键在于它的“胆量”。

可以说的一点是,在PHP中不应该使用大量无用的getter,因为它确实会降低代码的速度。你为什么不自己做一个基准测试,例如:

<?php

class test1{
    private $prop = 1;
    public function get_prop(){
        return $this->prop;
    }
}

class test2{
    public $prop = 1;
}

$t1 = microtime(true);
$obj1 = new test1();
for($i=0;$i<=1000000;$i++){
    $a = $obj1->get_prop();
}
echo 'test1, access with get_prop : '.(microtime(true) - $t1).'ms<br/>';

$t1 = microtime(true);
$obj2 = new test2();
for($i=0;$i<=1000000;$i++){
    $a = $obj2->prop;
}
echo 'test2, direct access to prop : '.(microtime(true) - $t1).'ms';

可以说的一点是,您不应该在PHP中使用大量无用的getter,因为它确实会降低代码的速度。你为什么不自己做一个基准测试,例如:

<?php

class test1{
    private $prop = 1;
    public function get_prop(){
        return $this->prop;
    }
}

class test2{
    public $prop = 1;
}

$t1 = microtime(true);
$obj1 = new test1();
for($i=0;$i<=1000000;$i++){
    $a = $obj1->get_prop();
}
echo 'test1, access with get_prop : '.(microtime(true) - $t1).'ms<br/>';

$t1 = microtime(true);
$obj2 = new test2();
for($i=0;$i<=1000000;$i++){
    $a = $obj2->prop;
}
echo 'test2, direct access to prop : '.(microtime(true) - $t1).'ms';

与此主题相关的其他资源。静态方法似乎慢得多


与本主题相关的其他资源。静态方法似乎慢得多


这是函数调用开销,但在正常情况下可以忽略不计。这也适用于函数,而不仅仅是类方法。类方法和函数之间的开销差异甚至可以忽略不计

如果要在函数中运行数千次,那么避免在函数中移动代码并使用内联代码是有意义的。否则,您不会注意到任何性能影响


除非您真的需要,否则不要这样做,因为您最终会得到组织不良的代码。这是函数调用开销,但在正常情况下可以忽略不计。这也适用于函数,而不仅仅是类方法。类方法和函数之间的开销差异甚至可以忽略不计

如果要在函数中运行数千次,那么避免在函数中移动代码并使用内联代码是有意义的。否则,您不会注意到任何性能影响



除非你真的需要,否则不要这样做,因为你最终会得到组织不良的代码

OOP本身并不“慢”。那是垃圾。程序员创建慢程序。算法可能会很慢。您做过什么样的评测/基准测试来将应用程序的慢部分缩小到这样的程度?如果您考虑性能,请转到本机>在某些上下文中,所有类型的间接寻址(包括但不限于方法调用)都会产生显著的影响。然而,这一点都不相关,因为我可以在这里列举更多的原因(两个例子:你不会使用PHP,除非你已经优化了其他一百万件事情,否则你甚至无法衡量任何差异)。忽略那些只说“OOP很慢”或类似的话的人。有时人们会说一些很愚蠢的话。我想这里一致的答案是OOP并不慢。OOP本身就不是“慢”。那是垃圾。程序员创建慢程序。算法可能会很慢。您做过什么样的评测/基准测试来将应用程序的慢部分缩小到这样的程度?如果您考虑性能,请转到本机>在某些上下文中,所有类型的间接寻址(包括但不限于方法调用)都会产生显著的影响。然而,这一点都不相关,因为我可以在这里列举更多的原因(两个例子:你不会使用PHP,除非你已经优化了其他一百万件事情,否则你甚至无法衡量任何差异)。忽略那些只说“OOP很慢”或类似的话的人。有时候人们会说一些很愚蠢的话。我想这里的一致答案是OOP并不慢。我还是不明白。你能解释一下“开销”是什么吗?这就是我的困惑所在。什么是“胆量”?guts是上述函数的简单实现,里面有什么。我读过Puciek,我来这里是因为我不理解它。那么也许你应该澄清你不理解的地方?问问声称“慢”的人,不是真正的OO爱好者:)严肃地说,它来自所有这些小片段的组合,在那里是半毫秒,在那里是另一半,我们已经落后了毫秒。我仍然不明白。你能解释一下“开销”是什么吗?这就是我的困惑所在。什么是“胆量”?guts是上述函数的简单实现,里面有什么。我读过Puciek,我来这里是因为我不理解它。那么也许你应该澄清你不理解的地方?问问声称“慢”的人,不是真正的OO爱好者:)严肃地说,它来自所有这些小片段的组合,在那里是半毫秒,在那里是另一半,我们已经落后了毫秒。所以我们在这里谈论毫秒。我会再看一遍我的代码。所以我们在这里讨论毫秒。我会再看一遍我的代码。这就是我要找的。谢谢。因此,如果是1000个函数,调用速度很慢。即使是数千个函数,在当前的CPU中也几乎看不到。你应该做公关