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>";
///}
?>
...全文
1355 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)
1.PHP4.23在WindowsXP下的IIS和Apache2两种服务器上的安装实例 http://www.phpe.net/articles/260.shtml 2.Apache服务器配置全攻略(一)http://www.phpe.net/articles/94.shtml 3.WinXp sp1+apache2.0+php5.0+mysql+ phpMyAdmin 安装全功略[教学]http://warmsun.51.net/article/show.php?id=207 1.两种Web服务器(IIS和Apache)可同时存在,只要保证他们的监听端口号不同即可,如:IIS用默认的80,而将Apache的配置为8080。 也可暂时让IIS停止服务,而让Apache用80。 2.在D:\apache2\Apache2\conf下的httpd.conf中,注释符号为#,但不能在一条未注释语句的后面添加注释内容,否则出错,如: httpd.conf中的第173行LoadModule php5_module modules/php5apache2.dll后就不可,否则提示"LoadModule takes two arguments,a module name and the name of a shared object file to load it from". 编写的php文件必须放在Apache2\htdocs文件夹下。 3.要修改的文件及内容: (1)D:\program files\php-5.0.0RC3-Win32下的php.ini-dist 文件 改名为php.ini 搜索extension_dir = ./ 这行,并将其路径指到你的PHP5目录下的ext目录,比如:    extension_dir = "D:\program files\php-5.0.0RC3-Win32\ext" 第545行改为extension=php_mysql.dll (2)D:\apache2\Apache2\conf下的httpd.conf文件 第173行改为LoadModule php5_module modules/php5apache2.dll 前提是将php5apache2.dll(在D:\program files\php-5.0.0RC3-Win32下)复制到D:\apache2\Apache2\modules下。 第761行#AddType application/x-tar .tgz下添加如下内容: AddType application/x-httpd-php .php AddType image/x-icon .ico 找到: #NameVirtualHost * 修改为: NameVirtualHost 127.0.0.1 //或localhost 找到: 修改下面几行: ServerAdmin (你刚才安装时候输入的管理员信箱) DocumentRoot D:\apache2\Apache2\htdocs ServerName Apache2 # ErrorLog logs/dummy-host.example.com-error_log # CustomLog logs/dummy-host.example.com-access_log common 增加默认文件: 找到DirectoryIndex 这行,可以这样修改,添加默认的文件名: DirectoryIndex index.php default.php index.htm index.html default.htm default.html 最后,在该文件末尾加上下面两行 ScriptAlias /php/ "D:\program files\php-5.0.0RC3-Win32" Action application/x-httpd-php "/php/php.exe" 119行修改为Listen 8080,即端口号为8080,80已被IIS占用了。 213行修改为ServerName 127.0.0.1:8080 240行修改为php-5.0.0RC3-Win32"> 255行修改为 632行左右将# DefaultLanguage nl修改为DefaultLanguage GB2312,即默认语言是简体中文。 709行左右将AddDefaultCharset ISO-8859-1修改为AddDefaultCharset gb2312,即增加默认的字符集为简体中文。 若不修改上面两行,则显示的文字是乱码?修改后并不会立刻改过来,好象重启系统或计算机后才好。 (3)要复制的文件: PHP5的"php5ts.dll"复制到C:\WINDOWS\system32目录下. PHP5的PHP.ini(按上面所述修改)和LibMysql.dll必须都放在windows目录下,才支持mysql。 到此Apache的PHP环境已经完全建立了 测试:   用记事本新建个文件,写下下面几行,保存到D:\apache2\Apache2\htdocs目录下, 这个目录就是你的站点跟目录,命名为phpinfo.php.然后在浏览器中输入http://localhost/phpinfo.php就可以看到想尽的关于PHP的信息了。 phpinfo(); ?> 4. 如果万一不知道自己改的哪一个部分使Apache启动不起来了,你可以切换到Apache安装目录下的Conf文件夹, 将http.conf文件删除掉,再将Apache的默认配置文件httpd.default.conf改名成http.conf即可。如果你想进一步的了解Apache的配置, 可以参考一下本站的另一篇文章"Apache服务器配置全攻略"(http://www.phpe.net/?n=ReadArticle&a=94)。 5.遇到的问题及解决办法: 4.将php5apache2.dll(在D:\program files\php-5.0.0RC3-Win32下)复制到D:\apache2\Apache2\modules下。 若直接写成LoadModule php5_module D:\program files\php-5.0.0RC3-Win32\php5apache2.dll,则也提示LoadModule takes two arguments,a module name and the name of a shared object file to load it from". 若直接写成LoadModule php5_module modules/php5apache2.dll,而事先未将php5apache2.dll(在D:\program files\php-5.0.0RC3-Win32下) 复制到D:\apache2\Apache2\modules下,则在点击 开始|所有程序|Apache HTTP Server 2.0.50|Configure Apache Server|Test Configuration 时提示"Cannot load D:/apache2/Apache2/modules/php5apache2.dll into server: \xd5\...",到D:/apache2/Apache2/modules/一看,发现 没有php5apache2.dll这样的文件,所以将其复制过去即可。 5.之后测试配置(Test Configuration)成功(成功后的显示是闪一下就消失了),但启动(Start)时,提示一个警告“PHP Startup: Unable to load dynamic library 'd:\program files\ php-5.0.0RC3-Win32\ext\msql.dll' -找不到指定的模块。”,但连续提示两次后Apache Server启动了,为了连警告都没有,我试着 将msql.dll(在D:\program files\php-5.0.0RC3-Win32下)复制到D:\program files\php-5.0.0RC3-Win32\ext下,但此时重新启动是提示警告 “PHP Startup: Invalid library (maybe not a PHP library) 'msql.dll'”。同样地,连续提示两次后Apache Server启动了,此时,运行 几个简单的程序没问题,但不知这个警告有什么后患,拭目以待吧。 原因是php.ini文件中的extension=msql.dll,将他改为extension=php_mysql.dll即可,但要将libmysql.dll复制到C:\WINDOWS下才可。 6.结果发现将libmysql.dll(在D:\program files\php-5.0.0RC3-Win32下)复制到C:\WINDOWS下,这个问题就迎人而解了。此时,再次启动 Apache Server时就没任何问题了,但有时会出现异常情况:发送错误报告之类的,但这种情况很少。 7.第一次装的是mysql5.0alpha,但显示的数据库只有test,而没有mysql,但显示mysql的表时却能全部显示,后来将mysql5.0alpha 删除改装mysql4.0,尽管在my.ini中修改了datadir和basedir(修改为mysql4.0的),但在WinMySQLAdmin1.4中的Variables选项卡中显示的内容仍是有关mysql5.0alpha 的内容,如:datadir和basedir。以上工作是在一小时内完成的,结果到第二天,WinMySQLAdmin1.4才开始重新启动,但速度很慢 (本身启动速度就很慢,好象得3-4个小时吧)。右键“红绿灯”图标,选择Win NT下的Install the Service,最后再Start the Service。 这时,绿灯亮,表示启动了。发现Variables选项卡中显示的内容正确了。但在Databases选项卡中显示的还只是test数据库,没有mysql. 在WinMySQLAdmin1.4没有启动前,点击mysql\bin下的mysql.exe时,只显示黑屏,或很快闪过出现 "ERROR 2003: Can''t connect to MySQL server on ''localhost'' (10061)“,。 而启动后,显示mysql>提示符。

21,891

社区成员

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

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