【问题标题】:$_SERVER['DOCUMENT_ROOT'] vs $path = $_SERVER['DOCUMENT_ROOT']$_SERVER['DOCUMENT_ROOT'] 与 $path = $_SERVER['DOCUMENT_ROOT']
【发布时间】:2013-08-12 23:00:42
【问题描述】:

这两种包含外部脚本的不同方式在性能上是否存在差异?

不使用变量:

include $_SERVER['DOCUMENT_ROOT'].'/class/conf.php';
include $_SERVER['DOCUMENT_ROOT'].'/class/Db.php';
include $_SERVER['DOCUMENT_ROOT'].'/class/Posts.php';

使用变量:

$path = $_SERVER['DOCUMENT_ROOT'];
include $path.'/class/conf.php';
include $path.'/class/Db.php';
include $path.'/class/Posts.php';

出于记忆目的,我尽可能避免使用变量,但我不知道这是否是提高性能的好习惯。

【问题讨论】:

  • 是一个单一的变量会损害性能,考虑到优化吗?更好的可读性在这里不是更重要吗?

标签: php variables


【解决方案1】:

为了记忆,我越能避免变量

这就是所谓的“过早优化”。除非你明确知道你有内存问题,并且你分配一个可能有几十个字符长的字符串会增加你的内存问题,否则不要试图节省空间。

性能有区别吗

担心“性能”也是如此。这两种方法之间的时间差异非常小,以至于毫无意义,而且肯定难以察觉,尤其是当每个脚本只执行一次时。此外,与访问磁盘以加载 PHP 并对其进行解析所需的时间相比,这两种创建字符串的方式之间的时间差异是微不足道的。

最好关注the DRY principle不要重复自己。 DRY 可帮助您预防此类问题:

include $_SERVER['DOCUMENT_ROOT'].'/class/conf.php';
include $_SERVER['DOCUMEMT_ROOT'].'/class/Db.php';
include $_SERVER['DOCUMENT_ROOT'].'/class/Posts.php';

“我的数据库功能都不起作用!怎么了?”

【讨论】:

  • 我更喜欢使用 __FILES__ 而不是 $_SERVER['DOCUMENT_ROOT'] 来包含文件。如果应用程序未安装在文档根目录中,请考虑一个场景。
  • 我理解你的思维方式和“过早优化”的概念。另一方面,通过记住在有另一种方法来实现相同目标或使用函数/类而不是“在全局范围内编码”时避免使用变量,这只是一种思维方式,我认为当它成为某人的“自然编码方式”时,它不会增加开发时间。通过避免不断使用 div (divitis) 或避免使用可以使用 id 的类,这同样适用于客户端。 ...
  • ... 另外,我并不真正同意将变量视为“仅一个变量”的方式。 “一个变量x网页的用户”更现实。但是这里是过早的优化:) 作为一个不那么成熟的开发人员,我试图在正确的编码和过早的优化之间找到一个平衡点。我想阅读您对我在此评论中所写内容的看法。谢谢你的帮助:)
【解决方案2】:

为了记忆,我越能避免变量,但我不知道 这是否是一个良好的性能实践。

这绝对不是好习惯。对于当前的处理器来说,一个变量实际上什么都不是。

追求可读性可维护性

另外,一个变量增加了一个间接层,即如果你想改变你的路径,你可以简单地修改$path。修改$_SERVER['DOCUMENT_ROOT'] 不是个好主意。

我还建议您创建一个常量而不是变量:

define('CLASS_DIR', 'your value');

【讨论】:

    【解决方案3】:

    如果您的类文件夹位于您声明包含项的同一位置。

    $path = dirname(__FILE__).'/class/';
    

    然后从该文件夹自动加载您的课程。

    function my_autoloader($class) {
        include $path . $class . '.php';
    }
    
    spl_autoload_register('my_autoloader');
    

    【讨论】:

      猜你喜欢
      • 2011-12-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-01
      • 1970-01-01
      • 2011-11-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多