phpe.net的精华贴,讲程序的简化,强烈推荐!

thisky 2005-11-30 03:40:12

经常听到一些程序员说“只要‘效果’实现就行,管你用什么方式!”,听起来真让人生气,但我不想在此批评这类人,我写程序的宗旨是“简洁美观,逻辑性强”,程序并不是因为你写的越复杂,逻辑性越强,我认为,如果你表现的逻辑更容易让人理解,那才叫逻辑性强,不多废话了,如果你也关注这个问题,请参与讨论吧!

exp:表达式,statement:语句块;

<?php
///{1.简化前
if(exp)
{
$a = 1;
}
else
{
$a = 2;
}

//简化1
$a = 2;
if(exp)
{
$a = 1;
}


//简化2
$a = 1;
if(!exp)
{
$a = 2;
}

//简化3
$a = (exp)?1:2;

//说明,简化3最简洁,但简化2和简化3更容易让人理解,且符合高级程序中“赋初值”的习惯。
///}


///{2.
if(exp1)
{
if(exp2)
{
statement;
}
}

//简化后
if(exp1 && exp2)
{
statement;
}
///}





///{3.简化前
echo "<script>";
echo "alert('ok')";
echo "</script>";

//简化后
echo "<script>".
"alert('ok')".
"</script>";
///}
?>
...全文
1357 27 打赏 收藏 转发到动态 举报
写回复
用AI写文章
27 条回复
切换为时间正序
请发表友善的回复…
发表回复
ashchen 2005-12-01
  • 打赏
  • 举报
回复
这样的讨论还是有意义的,越讨论越明白嘛
一般情况下
php的执行时间=php载入内存花费时间(包括扩展库等)+php打开php程序文件花费时间+php扫描花费时间+php执行时间(包括include,数据库,读写文件,网络操作等)+释放资源花费时间

实际上php执行时间是非常少的,但其他时间很少能测量到,需要底层debug。
在一个请求的过程中这只说了php部分,还有apache部分,以及tcp/ip。
它们之间都是彼此调用,浪费的时间更多,但这些无用功是必须做的

有兴趣的可以深入探讨

要想真正提高执行速度,当然是让apache和php写成一个,并且常驻内存,增加缓存
哈,基本变成IIS了

xuzuning 2005-12-01
  • 打赏
  • 举报
回复
很遗憾的告诉楼主:经过一万次运行测试,您的原始代码和“简化”代码的运行速度是一样的

因为“简化”!=“优化”,而您举出的例子本身也无优化可言


if(exp1)
{
if(exp2)
{
statement;
}
}

简化成
if(exp1 && exp2)
{
statement;
}
并无不妥,但是
if(exp1)
{
if(exp2)
{
statement;
}
statement;
}
也能简化吗?

$a = (exp)?1:2;
的例子太简单了,不足以说明问题
由于三个成分都必须是有返回值的表达式,所以适用范围并不广泛
在者若后面还有语法成分时又必须用括号将三目运算括起,以免造成歧异。可读性不强

总之,完全没有必要在这些细节上纠缠,而把您的精力放在更高的层次上!
tiaoci 2005-12-01
  • 打赏
  • 举报
回复
ashchen(陈辉) 的观点是相当正确的
tiaoci 2005-12-01
  • 打赏
  • 举报
回复
哪怕三目符的效率比普通if高上10倍,

在一个即使只有几行的的程序中都会被掩盖掉

你以为你是在写汇编啊~~~~~
tiaoci 2005-12-01
  • 打赏
  • 举报
回复
这种效率值几分钱?搞笑!

效率不是这么评估DI~~~
  • 打赏
  • 举报
回复
上面 thisky 兄弟的程序,我常用的另一个写法。。。效率我也试过了。。。运行10万次速度是一样的因为原理都想同!只是换个个人习惯

$result_str = "";
for($i=1; $i<=5; $i++){
$result_str .= ",".$i;
}
$result_str = substr($result_str,1);
feyge 2005-12-01
  • 打赏
  • 举报
回复
if(exp)
{
$a = 1;
}
else
{
$a = 2;
}


//简化3
$a = (exp)?1:2;
确实最垃圾的写法



***************************

三目运算符比IF..ELSE之类的执行效率要高很多

别在此胡言乱语,那只能说明你无知
tiaoci 2005-12-01
  • 打赏
  • 举报
回复
///{2.
if(exp1)
{
if(exp2)
{
statement;
}
}

一眼就能看到那些情况处理了,那些没有处理

而 这种写法
//简化后
if(exp1 && exp2)
{
statement;
}
///}

就不是那么容易了~~~~
tiaoci 2005-12-01
  • 打赏
  • 举报
回复
第一个例子中,这个才是最正确的写法,所有人都能看懂
if(exp)
{
$a = 1;
}
else
{
$a = 2;
}


//简化3
$a = (exp)?1:2;

确实最垃圾的写法

tiaoci 2005-12-01
  • 打赏
  • 举报
回复
楼主的所有决定都使错误的
rf_wu 2005-12-01
  • 打赏
  • 举报
回复
需要考虑资源的项目我才会去注意这些细节,一般的项目随便了,写程序的速度越快越好.

很多项目的硬件资源也是浪费
ashchen 2005-12-01
  • 打赏
  • 举报
回复
现在硬件水平都很高了,web程序不是数学运算,一个页面很少有N的自加,4阶乘,无数循环,如果那样的计算,那说明你真强,即使常量相加相乘也最好先算好直接用,php是最终程序,没有编译器给你优化。
一个页面的计算时间(非数据库部分)几十个毫秒就能完成,时间花费主要在php解析,i/o操作,有精力的话可以多关注include次数,写文件效率等方面
不论是if else 还是 $a = (exp)?1:2; 都无关紧要,别拣了芝麻丢了冬瓜

自然框架 2005-12-01
  • 打赏
  • 举报
回复
//简化1
$a = 2;
if(exp)
{
$a = 1;
}

这也叫简化吗?

只能算作代码行数的减少!!!

你考虑过执行次数吗?

先负值,然后判断,如果是真的话,还要再进行一次负值。(最多3步,最少2步)

而你说的未优化的代码,先判断,无论真假,只需一次负值就可以了。(只须2步)

哪个优化??!!!

$a = (exp)?1:2;

至于这种嘛,只用了一行,代码上当然是最简单的了,但是内部是怎么处理的呢?我不太清楚,呵呵。就不多说了。

你说的这些都是小的地方没有什么必要深究。

应该研究研究程序的架构,怎么用最少的代码实现最多的功能!!!


比如说显示数据的页面,怎样用一个页面实现显示所有的功能模块。

例如:显示学生资料用这个页面,显示教师资料还是这个页面,显示商品列表还是用这个页面。
等等,类似的功能,统统用一个页面来实现,你能做到吗???


Cain 2005-12-01
  • 打赏
  • 举报
回复
个人觉得可以在日常code的时候应多注意 常量、静态变量的使用,函数、对象的引用,正则的使用(有时包括mysql中的正则),文件i/o操作,算法的优化等,注意释放内存、链接句柄等等。

提高程序工作效率,尽量少消耗内存,这是我个人的标准。
deng2001 2005-12-01
  • 打赏
  • 举报
回复
我一般的做法是狂用正则。
lisoon 2005-11-30
  • 打赏
  • 举报
回复
10101010101010101010101010
看谁能用最简单的方法输出这样的数字。只能一个一个输出,不能写成字符串输出。
Gdj 2005-11-30
  • 打赏
  • 举报
回复
因为在c里这样的效率是比if else高的。也是c里的推荐用法。习惯了。
Gdj 2005-11-30
  • 打赏
  • 举报
回复
$a = (exp) ? 1 : 2;
大量运用中……
ashchen 2005-11-30
  • 打赏
  • 举报
回复
$a = (exp) ? 1 : 2;

没有if ... else ... 执行速度快,而且可读不好

自己去测试一下
volca 2005-11-30
  • 打赏
  • 举报
回复
$a = (exp) ? 1 : 2;
可读性好且足够简化


(exp) ? doSomeThing() : doAnotherThing();
不推荐,可读性差
加载更多回复(7)

21,891

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧