分配新变量与重用现有变量的利弊

tim*_*son 3 php variables

首先,我很抱歉这只是一个编码风格问题.我想知道为每个属性或函数分配一个新变量以便重新分配现有变量的优缺点.这假设您不需要访问范围之外的变量.

这就是我的意思(注意名称$var0,...只是为了简单起见),选项#1:

$var0= array('hello', 'world');
$var1="hello world";
$var2=//some crazy large database query result
$var3=//some complicated function()
Run Code Online (Sandbox Code Playgroud)

与选项#2:

$var0= array('hello', 'world');
$var0="hello world";
$var0=//some crazy large database query result
$var0=//some complicated function()
Run Code Online (Sandbox Code Playgroud)
  1. 它取决于现有变量的内存大小吗?即,重新分配内存的计算成本更高,分配新变量?
  2. 这是否始终是范围问题,这意味着只有在不需要此处所示范围之外的每个变量值时才应使用选项#2?
  3. 它取决于每个变量值是什么?重新分配给不同的数据类型会有不同的成本吗?

Pee*_*Haa 5

我个人认为你永远不应该重新分配一个变量来包含不同的东西。这使得调试非常困难。如果您担心内存消耗,您可以随时使用unset()变量。

另请注意,您永远不应该有变量名称$var#。你的变量名应该描述它所包含的内容。

归根结底,最重要的是尽量减少代码中 WTF 的数量。第二个选项真是太糟糕了。

它取决于现有变量的内存大小吗?即,重新分配内存是否比分配新变量的计算成本更高?

这是关于限制您和其他人(重新)查看您的代码的 WTF 数量。

这是否始终是一个范围问题,这意味着仅当您不需要此处显示的范围之外的每个变量值时才应使用选项#2?

好吧,如果它在完全不同的范围内,那么使用相同的名称多个名称就可以了。只要清楚变量包含什么即可,例如:

// perfectly fine to use the same name again. I would go as far as to say this is prefered.
function doSomethingWithText($articleText)
{
    // do something
}

$articleText = 'Some text of some article';
doSomethingWithText($articleText);
Run Code Online (Sandbox Code Playgroud)

它取决于每个变量值是什么吗?重新分配给不同的数据类型是否会产生不同的相关成本?

不是成本问题,而是可维护性问题。这通常更重要。

  • 您应该考虑的“唯一”事情是您是否造成了混乱。如果你忽略混乱,这两种方法都不是“更好”。重用变量不会带来任何优化。在使用 PHP 构建软件时,这种担心绝对是错误的。使您的代码可维护。如果在编写代码后发现其中某些部分很慢,请对其进行优化。不要通过重用变量名来优化它们,这不是优化。 (2认同)

Mau*_*ice 5

从技术上讲,重用变量会(不显着)更快.尽管如此,它将在可衡量的性能方面实现零差异.

虽然硬件变得更便宜而且时间越来越贵,但您应该选择具有可维护的代码.从长远来看,这将为您节省头痛和公司的硬资金.

只有在可以获得足够的性能增益的情况下才能优化,以抵消您投入的工作量(金钱).

如今的云和服务器集群,一点一点优化的代码最终很可能不会成为一个较慢的项目.您的项目运行速度更快,但需要更多的CPU周期,因此您的托管服务提供商会花费更多的钱.然而,这个较小的增加成本,很可能不会权衡数小时的性能增益优化.除非,当然,你问这个是因为你正在为亚马逊开发.(甚至在像亚马逊这样的地方,每天都有数百万次点击,重复使用变量不会带来明显的性能提升)

回到你的问题; 我相信你只应该在它保存原始状态的更新内容时重用一个变量.但总的来说,这不会发生太多.

我认为在以下情况下,重用$contentvar是合乎逻辑的选择

function getContent()
{
    $cacheId = 'someUniqueCacheIdSoItDoesNotTriggerANotice';
    $content = someCacheLoadingCall( $cacheId );

    if (null === $content) {
        $content = someContentGeneratingFunction();

        someCacheSavingCall( $cacheId, $content);
    }

    return $content;
}
Run Code Online (Sandbox Code Playgroud)

描述性代码

另外,请善待您未来的自我,始终为您的变量使用描述性名称.你会为此感谢你.然后当你与自己达成协议时永远不会重复使用变量,除非它在逻辑上有意义,你已经朝着可维护的代码迈出了一步.

想象一下,从现在开始的6个月内,在你完成另一个大项目 - 或者一个更小的项目 - 之后,你会接到一个重要客户的电话,说旧项目中存在一个错误.圣洁!@#!现在就解决这个问题!你打开了,到处看到这样的功能;

function gC()
{
    $cI = 'someUniqueCacheIdSoItDoesNotTriggerANotice';
    $c  = sclc( $cI );

    if (null === $c) {
        $c = scg_f();
        scsc( $cI, $c);
    }

    return $c;
}
Run Code Online (Sandbox Code Playgroud)

最好使用描述性变量和函数名称,并使代码编辑器具有良好的代码完成性,这样您仍然可以根据需要进行编码.现在,我推荐Aptana StudioZend Studio,Zend有更好的代码完成,但Aptana已经证明更稳定.

PS.我不知道你的编程水平,对不起,如果我喋喋不休地说.如果与您无关,我希望能帮助其他人阅读此内容:)

  • 我希望我能两次投票,以"优化增益与工作之间的关系".如此多的浪费时间花在这种非优化上...... (3认同)