首先,如果这只是一个编码风格问题,我道歉。我想知道为每个属性或函数分配一个新变量以便重新分配现有变量的优缺点。这假设您不需要访问超出范围的变量。
这就是我的意思(注意名称$var0,...
只是为了简单起见),
选项#1:
$var0= array('hello', 'world');
$var1="hello world";
$var2=//some crazy large database query result
$var3=//some complicated function()
VS。 选项#2:
$var0= array('hello', 'world');
$var0="hello world";
$var0=//some crazy large database query result
$var0=//some complicated function()
答案 0 :(得分:5)
从技术上讲,重用变量会(微不足道)更快。尽管如此,它在可衡量的性能方面会产生零差异。
虽然硬件变得更便宜而且时间越来越贵,但您应该选择具有可维护的代码。从长远来看,这将为您节省头痛和公司的巨额资金。
只有在可以获得足够性能增益的地方进行优化才能抵消 你投入的工作量(金钱)。
如今的云和服务器群集中,最终没有优化的代码很可能不为最慢的项目做出了贡献。您的项目运行速度更快,但需要更多的CPU周期,因此您的托管服务提供商会花费更多的钱。然而,这个较小的增加成本,很可能不会权衡数小时的性能增益优化。除非,当然,你问这个是因为你正在为亚马逊开发。 (甚至在像亚马逊这样的地方,每天有数百万次点击,重复使用变量也不会带来明显的性能提升)
回到你的问题;我相信你只应该在它保存原始状态的更新内容时重用一个变量。但总的来说,这不会发生太多。
我认为在以下情况下,重用$content
var是制作
function getContent()
{
$cacheId = 'someUniqueCacheIdSoItDoesNotTriggerANotice';
$content = someCacheLoadingCall( $cacheId );
if (null === $content) {
$content = someContentGeneratingFunction();
someCacheSavingCall( $cacheId, $content);
}
return $content;
}
描述性代码
另外,请善待您未来的自我,始终为变量使用描述性名称。你会为此感谢你。然后当你与自己达成协议时永远不会重复使用变量,除非它在逻辑上有意义,你已经朝着可维护的代码迈出了一步。
想象一下,从现在开始的6个月内,在你完成了另一个大项目 - 或者一个更小的项目之后 - 你会接到一个重要客户的电话,说旧项目中存在一个错误。圣洁!@#!现在就解决这个问题! 你打开并在任何地方看到这样的功能;
function gC()
{
$cI = 'someUniqueCacheIdSoItDoesNotTriggerANotice';
$c = sclc( $cI );
if (null === $c) {
$c = scg_f();
scsc( $cI, $c);
}
return $c;
}
使用描述性变量和函数名称以及使用良好代码完成的代码编辑器更好,这样您仍然可以根据需要进行编码。现在,我建议Aptana Studio或Zend Studio,Zend有更好的代码完成,但Aptana已经证明更稳定。
PS。我不知道你的编程水平,对不起,如果我喋喋不休地说。如果与您无关,我希望能帮助其他可能阅读此内容的人:)
答案 1 :(得分:3)
你应该从不使用选项#2。为不相关的代码块重用变量是一种可怕的做法。您甚至不应该选择#2选项。如果你的函数太长以至于你正在完全改变上下文并处理一些不同的问题,你应该将你的函数重构为更小的单一用途函数。
你应该从不重用一个变量,因为在不再使用旧值之后需要“回收”它们。如果您正在构建软件,如果变量不再存在,它应该自然地超出范围。您的决定应该与性能或内存优化无关,这两者都不会受到变量命名的影响。选择变量名时唯一的考虑因素应该是生成可维护的稳定代码。
您甚至在问自己是否重用变量这一事实意味着您使用的名称过于通用。 var0
,var1
等变量名称很糟糕。您应该根据实际包含的内容命名变量,并在需要存储新值时声明新变量。
答案 2 :(得分:3)
我个人会说你永远不应该重新分配一个变量来包含不同的东西。这使得调试变得非常困难。如果您担心内存消耗,您可以始终unset()
个变量。
另请注意,您永远不应该有变量名$var#
。你的变量名应该描述它的含义。
在一天结束时,最重要的是尽量减少代码中的WTF数量。选项二是一个大型WTF。
它是否依赖于现有变量的内存大小?即,重新分配内存的计算成本更高,分配新变量?
这是关于限制你和其他人(重新)查看代码的WTF数量。
这是否始终是范围问题,这意味着只有在不需要此处所示范围之外的每个变量值时才应使用选项#2?
如果它在一个完全不同的范围内,如果你使用相同的名称多个名称就可以了。只要清楚varbel包含什么,例如:
// 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);
它取决于每个变量值是什么?重新分配给不同的数据类型会产生不同的成本吗?
不是成本问题,而是可维护性问题。这通常更重要。