PHP的继承速度 - php

It's difficult to tell what is being asked here. This question is ambiguous, vague, incomplete, overly broad, or rhetorical and cannot be reasonably answered in its current form. For help clarifying this question so that it can be reopened, visit the help center。

9年前关闭。

我想知道在php中使用继承的速度价格是多少。

参考方案

继承是OOP的关键要素。你不应该担心自己任何速度的影响,可能有。您可以(并且应该)偏向于继承而不是继承,但是,如果您的设计需要继承,则可以使用它。别的什么都想说你想不带球棒打棒球。继承是游戏的一部分。

无论如何,这是您最喜欢的分析器要运行的一些操作:

<?php error_reporting(-1); ini_set('memory_limit', '1024M');

// Create classes A to Z with each class extending the previous class
class A { public function fn() { return TRUE; } }
$previous = 'A';
foreach(range('B','Z') as $klass) {
    eval(sprintf('class %s extends %s{}', $klass, $previous));
    $previous = $klass;
}

// create results for non-inheriting class A
function A_is_a()       { return is_a(new A, 'A'); }
function A_get_class()  { return get_class(new A); }
function A_get_parent() { return get_parent_class(new A); }
function A_call_fn()    { $a = new A; return $a->fn(); }

// create results for Z that inherits from Y ... that inherits from A
function Z_is_a()       { return is_a(new Z, 'A'); }
function Z_get_class()  { return get_class(new Z); }
function Z_get_parent() { return get_parent_class(new Z); }
function Z_call_fn()    { $z = new Z; return $z->fn(); }

for($i=0;$i<10000;$i++) A_is_a();
for($i=0;$i<10000;$i++) A_get_class();
for($i=0;$i<10000;$i++) A_get_parent();
for($i=0;$i<10000;$i++) A_call_fn();

for($i=0;$i<10000;$i++) Z_is_a();
for($i=0;$i<10000;$i++) Z_get_class();
for($i=0;$i<10000;$i++) Z_get_parent();
for($i=0;$i<10000;$i++) Z_call_fn();

使用PHP5.3.3 CLI和Zend Debugger在我的机器上的结果

Function     Calls  Av. Own   Own Time  Others    Total

A_is_a       10000  0,000003  0,025626  0,000000  0,025626
A_get_class  10000  0,000002  0,022033  0,000000  0,022033
A_get_parent 10000  0,000002  0,020804  0,000000  0,020804
A_call_fn    10000  0,000003  0,034949  0,012274  0,047223

Z_is_a       10000  0,000002  0,024436  0,000000  0,024436
Z_get_class  10000  0,000003  0,028833  0,000000  0,028833
Z_get_parent 10000  0,000002  0,022144  0,000000  0,022144
Z_call_fn    10000  0,000003  0,033359  0,012549  0,045908

免责声明:请注意,您的计算机上的结果可能会有所不同,并且请注意,无论如何,孤立的基准通常毫无意义,尤其是在像这样的µ优化时。您可以将代码更改为扩展1000个类,然后在is_a函数调用中看到差异,但是,严重的是,如果您的任何生产代码扩展了1000个类,您都会遇到更大的问题;)

PHP-全局变量的性能和内存问题 - php

假设情况:我在php中运行一个复杂的站点,并且我使用了很多全局变量。我可以将变量存储在现有的全局范围内,例如$_REQUEST['userInfo'],$_REQUEST['foo']和$_REQUEST['bar']等,然后将许多不同的内容放入请求范围内(这将是适当的用法,因为这些数据指的是要求自…

php-casperjs获取内部文本 - php

我正在为casperjs使用php包装器-https://github.com/alwex/php-casperjs我正在网上自动化一些重复的工作,我需要访问一个项目的innerText,但是我尚不清楚如何从casperjs浏览器访问dom。我认为在js中我会var arr = document.querySelector('label.input…

PHP getallheaders替代 - php

我正在尝试从服务器上的apache切换到nginx。唯一的问题是我在PHP脚本中使用的getallheaders()函数,该函数不适用于Nginx。我已经尝试过用户在getallheaders函数上的php站点上提供的注释,但这并不返回所有请求标头。请告诉我如何解决这个问题。我真的想切换到Nginx。 参考方案 您仍然可以使用它,但是您必须像这里一样重新定义…

php getdate()-小时不正确 - php

我在iframe中将php用于计数器。我正在使用getdate();功能。我的当地时间不是下午12:16,如果我使用getdate();从php获取现在的本地时间,小时显示为13。我从php getdate()回答的值应该不是12吗?$d1=getdate(); $hournew=$d1['hours']; echo $hournew .…

php:是否有充分的理由引用所有数组键/索引? - php

我正在遍历别人的代码,他们总是避免转义其数组键。例如:$ row_rsCatalogsItems [名称]代替$ row_rsCatalogsItems ['名称']因此,我不断地对自己接触的所有事物进行微小的更改,以应对这些惰性。但是现在我想知道这样做是否有很多好处。我得到它会在默认为字符串之前检查常量(我在处理常量时会讨厌php中的行为,因为即使未定义,…