首页 | 新闻 | 交流 | 问吧 | 文档 | 手册 | 下载 | 博客

收藏此问题 发表新评论

一家之言的经验之谈php+mysql扎实个人基本功

一. 10句话
1.不要依赖register_global=ON的环境,从你刚懂得配置php运行环境甚至尚不明白register_global的ON/OFF会对自己有什么影响的那天起,就应该勇敢地把它设为OFF.
2.写程序前看看怎么用error_reporting.
3.不懂就问本身没错,但你需要在那之前查查手册。
4.当然,你需要懂得使用手册。手册上找不到答案的时候,应该考虑下网络上的搜索引擎。
5.刚学会php+mysql之后,不要叫嚷着要写论坛,要写XXX。要明白,刚学会写汉字并不表示你有能力写诗。
6.在学web编程的时候,你应该先去认识html这个朋友。
7.有点能力后,试着回答新手的问题,不要看到自己懂的而别人不懂就沾沾自喜,扔下一名“简单,那是基本的东西”就走更要不得。
8.思考是一个好习惯,不动手去写就等于空想,什么也没有。
9.写好一段程序,如果觉得很满意,一周后再看一遍,也许你会认为它应该有所改变
10.有空多看看别人的程序,找出他人的不足或优点,自己掂量。

二. 各取所需

1.善于使用“引用”,它能直接影响到程序的效率。

2.善于用三元运算子,可以让程式较精简有效率。
比如:

CODE:
[Copy to clipboard]
<?php
if ($data[$i]['nickname'])
{
    
$nickname =  $data[$i]['nickname'];
}
else
{
    
$nickname =  $data[$i]['ip'];
}
?>
可以写成:

CODE:
[Copy to clipboard]
<?php
$nickname 
=  $data[$i]['nickname'] ? $data[$i]['nickname'] : $data[$i]['ip'];
?>
3.善于组织if...else...回圈
比如:

CODE:
[Copy to clipboard]
<?php
$ext_name 
strtolower(str_replace("."""strrchr($upfilename".")));
if (!empty(
$type))
{
    if (!
strpos($type$ext_name))
    {
        echo 
"Please upload the file of $type form.";
        exit();
    }
}
?>
上面的代码你应该写成这样:

CODE:
[Copy to clipboard]
<?php
$ext_name 
strtolower(str_replace("."""strrchr($upfilename".")));
if (!(
$type==='') && strpos($type$ext_name)===false)
{
    echo 
"Please upload the file of $type form.";
    exit();
}
?>
4.尽量让你的代码清淅些
如果写成这样,是比较让人头痛的:

CODE:
[Copy to clipboard]
<?php
$foo
=$_post["foo"];
   
$username=$_post["user"]; 
$group=$_POST["group"];
if (
$group=="wheel"){
$username=$username."wheel";
}
?>
同样的代码,这样就比较让人看得舒服了:

CODE:
[Copy to clipboard]
<?php
$foo      
$_post["foo"];
$username $_post["username"];
$group    $_POST["group"];
if (
$group=="wheel")
{
    
$username $username."wheel";
}
?>
当然,有一定基础后,你应该要写成这样:

CODE:
[Copy to clipboard]
<?php
$foo      
= &$_POST['foo'];
$username =  $_POST["group"]!='wheel' $_POST["username"] : $_POST["username"].'wheel';
?>
5.编写规范的mysql 语句。
字段和表名用"`"引起来,避免保留字的影响。
如果看到下面这样的一个sql query,会让人比较头痛:

CODE:
[Copy to clipboard]
<?php
$query
="select `flash_comment`.`content` , `flash_comment`.`nickname` , `flash_comment`.`date` , `flash_comment`.`ip` , `product`.`p_name` , `sgflash`.`fid` from `flash_comment` left join `product` on ( `flash_comment`.`p_no` = `product`.`p_no` ) left join `sgflash` on ( `product`.`p_name` = `sgflash`.`f_name` ) where `flash_comment`.`p_no` != '' order by `flash_comment`.`date`";
?>
同样的一个query,写成这样就令人看得明白得多了:

CODE:
[Copy to clipboard]
<?php
$query 
"SELECT `flash_comment`.`content` , `flash_comment`.`nickname` , `flash_comment`.`date` , `flash_comment`.`ip` , `product`.`p_name` , `sgflash`.`fid` 
          FROM `flash_comment` 
          LEFT JOIN `product` ON ( `flash_comment`.`p_no` = `product`.`p_no` ) 
          LEFT JOIN `sgflash` ON ( `product`.`p_name` = `sgflash`.`f_name` ) 
          WHERE `flash_comment`.`p_no` != ''
          ORDER BY `flash_comment`.`date`"
;
?>
//
.....

(忙工作去了)待续...
昵称: Van.T  时间: 2004-05-08 16:33:00
精典!
咱学着,奋斗着!
昵称: yjjqtdht  时间: 2004-05-08 16:44:00
好啊
昵称: yuguanglou  时间: 2004-05-08 16:48:00
思:从一点一滴做起。
昵称: wormbaby  时间: 2004-05-08 17:03:00
to 楼主: 对于你所说的擅于用"引用", 速度更快.本人可不敢苟同.

PHP中使用引用有时速度会比不用引用速度慢很多.

不信?? 在一个函数中传递一个很大的数组,然后多调用几次这个函数..去掉引用再调用相同次,看结果哪个快.
昵称: 帅的像人渣  时间: 2004-05-08 17:09:00
看似简单,但往往被我们忽略了

不错,顶一把
昵称: pooer  时间: 2004-05-08 17:14:00


QUOTE:
最初由 帅的像人渣 发布
[B]to 楼主: 对于你所说的擅于用"引用", 速度更快.本人可不敢苟同.

PHP中使用引用有时速度会比不用引用速度慢很多.

不信?? 在一个函数中传递一个很大的数组,然后多调用几次这个函数..去掉引用再调用相同次,看结果哪个快. [/B]
呵,我哪里说了速度更快?
写任何程序都要按实际需要而写的,否则就是犯教条主义了
我所说的“善于使用”,并不是盲目使用。
昵称: Van.T  时间: 2004-05-08 17:26:00


QUOTE:
善于使用“引用”,它能直接影响到程序的效率
你的效率是指?
昵称: 帅的像人渣  时间: 2004-05-08 17:29:00
写得不错
昵称: ljbb  时间: 2004-05-08 17:29:00


QUOTE:
最初由 帅的像人渣 发布
[B]你的效率是指? [/B]
你理解为什么? 
另外,你所理解的"引用"是什么?它存在的意义在于什么?
昵称: Van.T  时间: 2004-05-08 17:33:00
我只是随便问问这个效率是指什么??

所以和你抬抬杠..  

别介意.
昵称: 帅的像人渣  时间: 2004-05-08 17:36:00
人渣这个可说错,引用的效率的确是高,下面是照你说的的测试代码,大家跑一下就知道谁更快了:

CODE:
[Copy to clipboard]
<?php

function getmicrotime()

   list(
$usec$sec) = explode(" ",microtime()); 
   return ((float)
$usec + (float)$sec); 


//initialize big array1
$bigArray1 = array();

for(
$ii=0$ii<600$ii++) 
{
    
$bigArray1[$ii]=$ii.'value';
}

//initialize big array2
$bigArray2 = array();
for(
$ii=0$ii<600$ii++) 
{
    
$bigArray2[$ii]=$ii.'value';
}

//fuction by reference
function passByRef(&$param
{
    
reset($param);
    while(
$kek=key($param)) 
    {
        
$param[$key] .= '-processed';
        
next($param);
    }
}

//function by copy
function passByCopy($param
{
    
reset($param);
    while(
$kek=key($param)) 
    {
        
$param[$key] .= '-processed';
        
next($param);
    }
}

//Call passByRef 50 times
$startTime getmicrotime();
for(
$ii=0$ii<50$ii++) 
{
    
passByRef($bigArray1);
}
$endTime getmicrotime();
$refTime $endTime-$startTime;

//Call passByCopy 50 times
$startTime getmicrotime();
for(
$ii=0$ii<50$ii++) 
{
    
passByCopy($bigArray2);
}
$endTime getmicrotime();
$copyTime =  $endTime-$startTime;

echo(
'reference time is '.$refTime.'<br>');
echo(
'copy time is'.$copyTime.'<br>');
?>
昵称: shukebeita  时间: 2004-05-08 17:38:00
效率问题嘛
还得研究....
昵称: wyw5257  时间: 2004-05-08 17:45:00
不错,顶一下~
昵称: yourlook  时间: 2004-05-08 17:46:00
学习学习!
昵称: aks  时间: 2004-05-08 17:47:00


CODE:
[Copy to clipboard]
<?php

function getmicrotime()

   list(
$usec$sec) = explode(" ",microtime()); 
   return ((double)
$usec + (double)$sec); 


//initialize big array1
$bigArray1 = array();

for(
$ii=0$ii<600$ii++) 
{
    
$bigArray1[$ii]=$ii.'value';
}

//initialize big array2
$bigArray2 = array();
for(
$ii=0$ii<600$ii++) 
{
    
$bigArray2[$ii]=$ii.'value';
}

$i 0;

//fuction by reference
function passByRef(&$param
{
    global 
$i;

    
$i++;

    
reset($param);
    while(
$kek=key($param)) 
    {
        
$param[$key] .= '-processed';
        
next($param);
    }

    if(
$i <= 100passByRef($param);
}

$i 0;

//function by copy
function passByCopy($param
{
    global 
$i;

    
$i++;

    
reset($param);
    while(
$kek=key($param)) 
    {
        
$param[$key] .= '-processed';
        
next($param);
    }

    if(
$i 100passByCopy($param);
}

//Call passByRef 50 times
$startTime getmicrotime();
passByRef($bigArray1);

$endTime getmicrotime();
$refTime $endTime-$startTime;

//Call passByCopy 50 times
$startTime getmicrotime();
passByCopy($bigArray2);

$endTime getmicrotime();
$copyTime =  $endTime-$startTime;

echo(
'reference time is '.$refTime.'<br>');
echo(
'copy time is'.$copyTime.'<br>');
?>
不好意思..刚才没有说清楚..
看看这个例子. 在递归时的效率..
昵称: 帅的像人渣  时间: 2004-05-08 17:54:00
为什么两个时间相差那么多
昵称: aks  时间: 2004-05-08 18:08:00
Sorry,你的代码有问题。正确的写法应该如下:

CODE:
[Copy to clipboard]
<?php
<?php
function getmicrotime()

   list(
$usec$sec) = explode(" ",microtime()); 
   return ((double)
$usec + (double)$sec); 

//initialize big array1
$bigArray1 = array();
for(
$ii=0$ii<600$ii++) 
{
    
$bigArray1[$ii]=$ii.'value';
}

//initialize big array2
$bigArray2 = array();
for(
$ii=0$ii<600$ii++) 
{
    
$bigArray2[$ii]=$ii.'value';
}

//fuction by reference
function passByRef(&$param
{
    global 
$i;
    
$i++;
    
reset($param);
    while(
$kek=key($param)) 
    {
        
$param[$key] .= '-processed';
        
next($param);
    }
    if(
$i 100passByRef($param);
}



//function by copy
function passByCopy($param
{
    global 
$i;
    
$i++;
    
reset($param);

    while(
$kek=key($param)) 

    {

        
$param[$key] .= '-processed';
        
next($param);
    }
    if(
$i 100passByCopy($param);
}

//Call passByRef 50 times
$i=0;//循环计数器归零
$startTime getmicrotime();
passByRef($bigArray1);
$endTime getmicrotime();
$refTime $endTime-$startTime;

//Call passByCopy 50 times
$i=0//循环计数器归零
$startTime getmicrotime();
passByCopy($bigArray2);
$endTime getmicrotime();
$copyTime =  $endTime-$startTime;
echo(
'reference time is '.$refTime.'<br>');
echo(
'copy time is'.$copyTime.'<br>');
?>
结果还是引用胜出 ;-)
昵称: shukebeita  时间: 2004-05-08 18:10:00


CODE:
[Copy to clipboard]
<?php
//使用LEFT JOIN
SELECT `sgflash`.`f_name`, `sgflash_comment`.`contents`, `sgflash_comment`.`nickname`, `sgflash_comment`.`date`
FROM `sgflash_commentLEFT JOIN `sgflash`
ON (`sgflash_comment`.`fid`=`sgflash`.`fid`)
ORDER BY `sgflash_comment`.`dateDESC LIMIT 010000

//不使用LEFT JOIN
SELECT `sgflash`.`f_name`, `sgflash_comment`.`contents`, `sgflash_comment`.`nickname`, `sgflash_comment`.`date`
FROM `sgflash_comment`, `sgflash`
WHERE `sgflash_comment`.`fid`=`sgflash`.`fid
ORDER BY `sgflash_comment`.`dateDESC LIMIT 010000
?>
测试对比
显示行 0 - 29 (10000 总计, 查询花费 0.6760 秒) 第一次执行用LEFT JOIN
显示行 0 - 29 (10000 总计, 查询花费 1.5532 秒) 第二次执行不用LEFT JOIN
显示行 0 - 29 (10000 总计, 查询花费 0.6655 秒) 第三次执行使用LEFT JOIN
显示行 0 - 29 (10000 总计, 查询花费 1.3730 秒) 第四次执行不合使用LEFT JOIN
昵称: Van.T  时间: 2004-05-08 18:12:00
高人..

偶也试过了,的确传递引用快..  正在找我原来的代码为什么传递引用会慢的原因..
昵称: 帅的像人渣  时间: 2004-05-08 18:13:00


QUOTE:
最初由 帅的像人渣 发布
[B]高人..

偶也试过了,的确传递引用快..  正在找我原来的代码为什么传递引用会慢的原因.. [/B]
一个copy动作,一个是内存指向
你说哪个快?
昵称: Van.T  时间: 2004-05-08 18:16:00
我当时也这么想,那是去年的一个晚上我试了一晚上,竟然是传递拷贝快..

所以我今天才引用并不是什么时候都快,但现在我又试了,传递引用确实快多了.
昵称: 帅的像人渣  时间: 2004-05-08 18:18:00
为什么两个都是copy  时间也相差那么多?
昵称: aks  时间: 2004-05-08 18:28:00
时间差上将近一半!
昵称: aks  时间: 2004-05-08 18:29:00
找到原来的代码测试..结果,让我跌眼镜..COPY竟然还是比REF快...


晕了.
昵称: 帅的像人渣  时间: 2004-05-08 18:49:00
贴出来大家看看。。。晕倒一大遍更有意思
昵称: Van.T  时间: 2004-05-08 18:55:00
不错!!
昵称: 一往情深  时间: 2004-05-08 19:08:00


QUOTE:
最初由 Van.T 发布
[B]一个copy动作,一个是内存指向
你说哪个快? [/B]
所以俺觉得 for 比 foreach 快,PHP5 比PHP4  快。没测试,瞎猜的 :p 希望有人来验证``
昵称: Dummy  时间: 2004-05-08 19:23:00
学习中!!……
昵称: gas2000  时间: 2004-05-08 19:41:00
有兴趣的可以去看看:


HARRY的建议是,在复杂结构(对象,数组)时,尽量使用引用;而对于普通变量(字符串,整型等等),不必使用(当然还得看情况了。。。;-))
昵称: KnightE  时间: 2004-05-08 19:43:00
还不懂各位说的引用是啥?
昵称: 『残风』  时间: 2004-05-08 20:44:00
不错,我现在也是尽量规范编码,容易差错,也便于以后查看。
这些东西也是要一定经历后才行的。
昵称: huix  时间: 2004-05-09 00:54:00
引用当然不是指针,因为PHP与C不同,它建立在比C更高层的应用上,而C是底层的,能访问物理内存地址,引用的概念来自于面向对象语言,对对象进行赋值操作,就是引用变量的一种例子,将对象引用给一个变量,比如在JAVA中将对象=给左边的变量,并非是变量的拷贝,而是引用,对被符值的变量的操作,相当于对右边对象的操作,引用与指针不同的是,引用变量与所赋对象是代码同一个值,只是一个别名,而指针是物理地址,从高层上看引用有点像指针,但PHP由C++编写(PHP只是C++编写出来的一个软件),他的引用从底层语言来看,或许经过好多指针及拷贝同时作用的过程才完成高层的一个引用
昵称: mrfool  时间: 2004-05-09 10:30:00
增长见识,学习学习.
昵称: 水若寒  时间: 2004-05-13 14:43:00
学习学习
昵称: digadu  时间: 2004-05-13 14:59:00
说得好!收下了
昵称: 刘世雄  时间: 2004-05-13 15:10:00
有点晕头,嗯,

程序呀!!!
昵称: myowngod  时间: 2004-05-13 15:15:00
丫的,这才是群英讨论技术交流的帖子嘛!!!

顶一把....
昵称: pooer  时间: 2004-05-13 16:01:00
恩,学习学习
昵称: 钢盅锅子  时间: 2004-05-13 21:16:00
我也说一句,大多时候,递归比推理要慢。
但是,递归层次比较少的时候我还是喜欢用。
感觉比较清晰,可扩充性强一些。
昵称: 日出东方XP  时间: 2004-05-13 21:22:00
我靠,这么多精典,等咱学会,俺老了!老了!^-^
昵称: yjjqtdht  时间: 2004-05-13 23:42:00
��嗦:
$foo      = $_post["foo"];
$username = $_post["username"];
$group    = $_POST["group"];
昵称: xltxlm  时间: 2004-05-14 14:17:00
????这个贴子二楼子的啊。加点透明的东东进去先!!!!
昵称: 火龙sky2号  时间: 2004-05-14 14:23:00
都是大侠,说的如此。。。
俺闭嘴
昵称: 游子云  时间: 2004-05-14 15:21:00


QUOTE:
最初由 日出东方XP 发布
[B]我也说一句,大多时候,递归比推理要慢。
但是,递归层次比较少的时候我还是喜欢用。
感觉比较清晰,可扩充性强一些。 [/B]
什么叫推理?!
昵称: fivebull  时间: 2004-05-14 15:43:00
问一下下面这句是什么意思?
LEFT JOIN `product` ON
昵称: jicker  时间: 2004-05-14 16:20:00
不参加技术谈论(因为不会)。只赚钱(因为没钱)。
昵称: sky_travel  时间: 2004-05-14 18:44:00
//fuction by reference
function passByRef(&$param)    //这个地方&$param加&有什么用啊?
{
    global $i;
    $i++;
    reset($param);
    while($kek=key($param))
    {
        $param[$key] .= '-processed';
        next($param);
    }
    if($i < 100) passByRef($param);
}
昵称: yueyang  时间: 2004-05-14 22:04:00
晕了


呵呵


灌水捎带顶一下
昵称: 波洛  时间: 2004-05-15 02:13:00


QUOTE:
最初由 yueyang 发布
[B]//fuction by reference
function passByRef(&$param)    //这个地方&$param加&有什么用啊?
{
    global $i;
    $i++;
    reset($param);
    while($kek=key($param))
    {
        $param[$key] .= '-processed';
        next($param);
    }
    if($i < 100) passByRef($param);
} [/B]
写个简单的例子,自己运行一下看看

CODE:
[Copy to clipboard]
<?php
$var 
100;
fvar($var);
function 
fvar(&$var)
{
    
$var += 100;
}
echo 
$var;
?>
昵称: Van.T  时间: 2004-05-15 10:06:00
高手啊
佩服!!!
昵称: 渺茫  时间: 2004-05-15 11:28:00
佩服ing,希望快点看到续篇。
昵称: Tung  时间: 2004-05-15 11:49:00
我非常遗憾的告诉大家,大家这么多的讨论都浪费了。非常抱歉,这一次我错了通过'&'给函数传递参数会比较慢,我在速度测试的例子里面有一个非常低级的错误,在这里向 Van T ,人渣和千千万万顶贴字的人表示深深的歉意。尤其是人渣,实在是对不起,还让你在这件事情上费心了。
修改后的速度测试:

CODE:
[Copy to clipboard]
<?php

function getmicrotime()

   list(
$usec$sec) = explode(" ",microtime()); 
   return ((float)
$usec + (float)$sec); 


//initialize big array1
$bigArray1 = array();

for(
$ii=1$ii<20$ii++) 
{
    
$bigArray1[$ii]=$ii.'value';
}

//initialize big array2
$bigArray2 = array();
for(
$ii=1$ii<20$ii++) 
{
    
$bigArray2[$ii]=$ii.'value';
}

//fuction by reference
function passByRef(&$param
{
    
//var_dump($param);
    
reset($param);
    while(
$kek=key($param)) 
    {
        
$param[$key].='-Processed';
        echo(
$param[$key]) ;
        
next($param);
    }
}

//function by copy
function passByCopy($param
{
    
//var_dump($param);
    
reset($param);
    while(
$kek=key($param)) 
    {
        
        
$param[$key].='-Processed';
        echo 
$param[$key] ;
        
next($param);
    }
}

//Call passByRef 50 times
$startTime getmicrotime();
for(
$ii=0$ii<5$ii++) 
{
    
passByRef($bigArray1);
}
$endTime getmicrotime();
$refTime $endTime-$startTime;

//Call passByCopy 50 times
$startTime getmicrotime();
for(
$ii=0$ii<5$ii++) 
{
    
passByCopy($bigArray2);
}
$endTime getmicrotime();
$copyTime =  $endTime-$startTime;

echo(
'<hr>Array Test reference time is '.$refTime.'<br>');
echo(
'Array Test copy time is'.$copyTime.'<br>');
?>
如果不带输出两种方法的速度差距不算大,引用方式的稍慢一些。
十分抱歉 :blowzy:
昵称: shukebeita  时间: 2004-05-15 15:43:00


QUOTE:
最初由 shukebeita 发布
[B]我非常遗憾的告诉大家,大家这么多的讨论都浪费了。非常抱歉,这一次我错了通过'&'给函数传递参数会比较慢,我在速度测试的例子里面有一个非常低级的错误,在这里向 Van T ,人渣和千千万万顶贴字的人表示深深的歉意。尤其是人渣,实在是对不起,还让你在这件事情上费心了。
修改后的速度测试:

CODE:
[Copy to clipboard]
<?php

function getmicrotime()

   list(
$usec$sec) = explode(" ",microtime()); 
   return ((float)
$usec + (float)$sec); 


//initialize big array1
$bigArray1 = array();

for(
$ii=1$ii<20$ii++) 
{
    
$bigArray1[$ii]=$ii.'value';
}

//initialize big array2
$bigArray2 = array();
for(
$ii=1$ii<20$ii++) 
{
    
$bigArray2[$ii]=$ii.'value';
}

//fuction by reference
function passByRef(&$param
{
    
//var_dump($param);
    
reset($param);
    while(
$kek=key($param)) 
    {
        
$param[$key].='-Processed';
        echo(
$param[$key]) ;
        
next($param);
    }
}

//function by copy
function passByCopy($param
{
    
//var_dump($param);
    
reset($param);
    while(
$kek=key($param)) 
    {
        
        
$param[$key].='-Processed';
        echo 
$param[$key] ;
        
next($param);
    }
}

//Call passByRef 50 times
$startTime getmicrotime();
for(
$ii=0$ii<5$ii++) 
{
    
passByRef($bigArray1);
}
$endTime getmicrotime();
$refTime $endTime-$startTime;

//Call passByCopy 50 times
$startTime getmicrotime();
for(
$ii=0$ii<5$ii++) 
{
    
passByCopy($bigArray2);
}
$endTime getmicrotime();
$copyTime =  $endTime-$startTime;

echo(
'<hr>Array Test reference time is '.$refTime.'<br>');
echo(
'Array Test copy time is'.$copyTime.'<br>');
?>
如果不带输出两种方法的速度差距不算大,引用方式的稍慢一些。
十分抱歉 :blowzy: [/B]
循环次数5次,速度基本相当~
我试了在50次以上,REFE比COPY略快的说~
昵称: 秀津  时间: 2004-05-15 16:23:00
如果带上输出的话copy就会快一些。
昵称: shukebeita  时间: 2004-05-15 16:33:00
楼上是$kek还是$key?
昵称: Van.T  时间: 2004-05-15 18:48:00
死光光了,这回糗大了。又犯了一个错。(常在河边走,难免会湿鞋)
那个应该是$key。如果不带输出(echo)引用速度稍快。如果带输出copy方式快一些。
昵称: shukebeita  时间: 2004-05-15 18:57:00


CODE:
[Copy to clipboard]
<?php
function getmicrotime()

   list(
$usec$sec) = explode(" ",microtime()); 
   return ((float)
$usec + (float)$sec); 
}

$arrvar = array();
for(
$i=0$i<10000$i++) 
{
    
$arrvar[$i] = $i;
}

function 
passByRef(&$param)
{
    
reset($param);
    while ( list( 
$key$val ) = each($param) ) {
        if (
$key%1000==0)
        {
            echo 
$param[$key]."<br>";
        } 
    }
}

function 
passByCopy($param)
{
    
reset($param);
    while ( list( 
$key$val ) = each($param) ) {
        if (
$key%1000==0)
        {
            echo 
$param[$key]."<br>";
        } 
    }
}

$startTime getmicrotime();
passByRef($arrvar);
$endTime getmicrotime();
$refTime $endTime-$startTime;

$startTime getmicrotime();
passByCopy($arrvar);
$endTime getmicrotime();
$copyTime $endTime-$startTime;

echo(
'<hr>Array Test reference time is '.$refTime.'<br>');
echo(
'Array Test copy time is'.$copyTime.'<br>');
?>
结果:
Array Test reference time is 0.0379199981689
Array Test copy time is0.0547819137573
昵称: Van.T  时间: 2004-05-15 19:14:00
同样有输出,还是引用快。
昵称: Van.T  时间: 2004-05-15 19:15:00
如果每一个元素都输出引用就不快乐。你每各1000个才输出一次,循环中大部分时间还是没有输出的所以就是这个结果了。
昵称: shukebeita  时间: 2004-05-15 19:31:00


CODE:
[Copy to clipboard]
<?php
function getmicrotime()

   list(
$usec$sec) = explode(" ",microtime()); 
   return ((float)
$usec + (float)$sec); 
}

$arrvar = array();
for(
$i=0$i<10000$i++) 
{
    
$arrvar[$i] = $i;
}

function 
passByRef(&$param)
{
    
reset($param);
    while ( list( 
$key$val ) = each($param) ) {
       
// if ($key%1000==0)
        //{
            
echo $param[$key]."<br>";
      
//  } 
    
}
}

function 
passByCopy($param)
{
    
reset($param);
    while ( list( 
$key$val ) = each($param) ) {
       
// if ($key%1000==0)
       // {
            
echo $param[$key]."<br>";
       
// } 
    
}
}

$startTime getmicrotime();
passByRef($arrvar);
$endTime getmicrotime();
$refTime $endTime-$startTime;

$startTime getmicrotime();
passByCopy($arrvar);
$endTime getmicrotime();
$copyTime $endTime-$startTime;

echo(
'<hr>Array Test reference time is '.$refTime.'<br>');
echo(
'Array Test copy time is'.$copyTime.'<br>');
?>
Array Test reference time is 0.289776086807
Array Test copy time is0.751796960831

还是引用快。
昵称: Van.T  时间: 2004-05-15 19:40:00
而且相差太远了
昵称: Van.T  时间: 2004-05-15 19:44:00
懒得和大家争..

个人试难结果可能都不一样.

你用两个循环, 分别历遍数组两次结果都不同呢..
昵称: 帅的像人渣  时间: 2004-05-15 20:29:00
Array Test reference time is 0.221124172211
Array Test copy time is1.36047697067

执行三次, ref 的从0。18------到0。22----------
                      copy 从1。11-------到1。36-----------
昵称: graymice  时间: 2004-05-15 20:35:00
我试了几次,如果没有输出,引用确实会快,如果有输出则测试结果很难确定。
第一次:
Array Test reference time is 0.329555988312
Array Test copy time is0.17404294014
第二次:
Array Test reference time is 0.137151002884
Array Test copy time is0.175014972687
第三次:
Array Test reference time is 0.151031970978
Array Test copy time is0.174519062042
第四次:
Array Test reference time is 0.405555963516
Array Test copy time is0.287677049637
第五次:
Array Test reference time is 0.245956897736
Array Test copy time is0.403090953827
昵称: shukebeita  时间: 2004-05-15 21:08:00


QUOTE:
最初由 shukebeita 发布
[B]我试了几次,如果没有输出,引用确实会快,如果有输出则测试结果很难确定。
第一次:
Array Test reference time is 0.329555988312
Array Test copy time is0.17404294014
第二次:
Array Test reference time is 0.137151002884
Array Test copy time is0.175014972687
第三次:
Array Test reference time is 0.151031970978
Array Test copy time is0.174519062042
第四次:
Array Test reference time is 0.405555963516
Array Test copy time is0.287677049637
第五次:
Array Test reference time is 0.245956897736
Array Test copy time is0.403090953827 [/B]
你测我那段代码,不管多少次,引用差不多都比COPY快一倍
昵称: Van.T  时间: 2004-05-15 21:28:00


QUOTE:
最初由 fivebull 发布
[B]什么叫推理?! [/B]
推理就是if ... else ...
比如举个简单的例子让你求1 - 10000 的和,

你可以用比较比较用推理和递归的差距。

好多书上都用求阶乘的例子讲递归,其实用的并不恰当。
昵称: 日出东方XP  时间: 2004-05-15 21:54:00
上边的数据就是用你的代码跑的。在我这边就是这样了。
昵称: shukebeita  时间: 2004-05-15 21:55:00
PHP都不同..
昵称: 帅的像人渣  时间: 2004-05-15 21:58:00
引不引用跟内存关系比较大吧~~~~~~~~~~
昵称: 网络混混  时间: 2004-05-16 01:54:00
学习
昵称: sai1691  时间: 2004-05-16 12:21:00
光帖测试结果,意义不大...
肯定和环境有关的.
昵称: KnightE  时间: 2004-05-16 17:04:00
我是新手,看不懂
昵称: pingfan88  时间: 2004-05-16 21:39:00
宽带一出。。。。万事俱休
昵称: 开心果  时间: 2004-05-17 00:05:00
呵呵,硬件的变化,不会阻碍人们寻找解决问题的最佳途径的...
so~算法,数据结构,不会落伍的
昵称: KnightE  时间: 2004-05-17 00:50:00
。。。。。。。。

不打算再在技术版多说什么

只是每次看到一堆人在PHP版为JS特效喝彩、不谈工程框架设计思路谈小数点后好几位的比拼、不讲信仰讲生活。。。。就感到心寒

这就是中国PHP,这就是中国特色的开源社区
昵称: 开心果  时间: 2004-05-17 01:35:00
恩...

比较喜欢sitepoint那边氛围,好多人在真正探讨,在研究(当然求助学习的肯定有).

国内就比较少拉....技术论坛,更像是答疑论坛

QUOTE:
为JS特效喝彩、不谈工程框架设计思路谈小数点后好几位的比拼、不讲信仰讲生活。。。。
所以像这帖的*主题*...应该欢迎的^^(原创+思想+探讨)



跑题了....-_-
昵称: KnightE  时间: 2004-05-17 01:55:00
做任何事都要从做好点滴的小事做起
一个强大的系统都有可能会因一个分号或引号而瘫痪

不要好高骛远而因小失大
昵称: Van.T  时间: 2004-05-17 12:20:00
忍不住顶! 经验学习中.....


最后一个问题想问一下 ,对sql语句的写法 ,我看见一些程序用
sprintf 来做,好象更清晰哦(个人认为), 是不是用sprintf慢点呢?
昵称: k999  时间: 2004-05-18 01:09:00


QUOTE:
最初由 开心果 发布
[B]。。。。。。。。

不打算再在技术版多说什么

只是每次看到一堆人在PHP版为JS特效喝彩、不谈工程框架设计思路谈小数点后好几位的比拼、不讲信仰讲生活。。。。就感到心寒

这就是中国PHP,这就是中国特色的开源社区 [/B]
偶认为没必要过于悲观,现实是真正能达到你所希望的高度的人并不多,就算是我们自已不也正是为了能达到这种高度而希望能有如此的一个环境吗?

象JS特效这种东东,就好象快餐一样,当然有很多人喜欢,这也是无可非意的,说起来,真到要用的时候,我还真是懒得自已再去调试算法和流程,能有个现成的一改就用,也不错啦
昵称: s_seraph  时间: 2004-05-18 01:51:00
能 给 我说说怎么架设个人服务器吗?

支持php的

谢谢!


qq:110031677



我的个人主页:http://feion199.533.net
昵称: feion199  时间: 2004-05-18 11:50:00
学习学习
昵称: 童坦  时间: 2004-05-18 14:04:00


QUOTE:
最初由 feion199 发布
[B]能 给 我说说怎么架设个人服务器吗?

支持php的

谢谢!


qq:110031677



我的个人主页:http://feion199.533.net [/B]
在GOOGLE里搜inux PHP Mysql,无数无数
昵称: s_seraph  时间: 2004-05-18 14:11:00
不错啊
菜鸟的我还是得继续努力咯
昵称: 阿发  时间: 2004-05-19 17:58:00
好有感触啊~~~~
觉得自己的仍处于很低级的学习阶段
恩,继续努力着!
昵称: Xhunter  时间: 2004-05-21 09:30:00
昵称: gavinguo  时间: 2004-05-21 12:33:00
好挖!
昵称: 绝版英俊  时间: 2004-05-21 17:27:00
C语言没学好,下面那个三元没看懂

CODE:
[Copy to clipboard]
<?php
同样的代码,这样就比较让人看得舒服了
:

PHP代码:

$foo      $_post["foo"];

$username $_post["username"];

$group    $_POST["group"];

if (
$group=="wheel")

{

    
$username $username."wheel";

}



当然,有一定基础后,你应该要写成这样:

PHP代码:

$foo      = &$_POST['foo'];

$username =  $_POST["group"]!='wheel' $_POST["username"] : $_POST["username"].'wheel';
?>
$username =  $_POST["group"]!='wheel' ? $_POST["username"] : $_POST["username"].'wheel';

这句应该怎么解释?

如果 $_POST["group"]!='wheel'
那么 $username= $_POST["group"]=$_POST["username"] :

否则 $username= $_POST["group"]=$_POST["username"].'wheel';

我看下来是这样的,怎么和上面的那个不一样啊,谁来分析下?

$_POST["group"]!='wheel' ? $_POST["username"] : $_POST["username"].'wheel;

这里没有对'
$_POST["group"] 赋值嘛?
昵称: Dalamar  时间: 2004-05-22 21:42:00
很不错的东西,还没有全部做到
昵称: magicstu  时间: 2004-05-22 22:21:00
如果测试的字段是很大的话,pass by reference的优势就很明显了
昵称: 34010493  时间: 2004-05-25 10:46:00
Van.T写的不错,应该学习学习。努力学习工作啊!
昵称: pippen7923  时间: 2004-05-27 11:32:00
二楼子的帖 我再顶
昵称: yuguanglou  时间: 2004-05-28 00:16:00
顶! (虽然闲话比主题多)
昵称: movenet  时间: 2004-05-29 12:40:00
不好意思,看了楼主的帖子,有一个不太清楚,什么是“error_reporting”?在哪看?
昵称: emylekao  时间: 2004-05-31 08:17:00
我是新手,收益不浅,呵呵
昵称: 感动  时间: 2004-05-31 13:06:00
好,继续
昵称: 乱码!  时间: 2004-06-01 09:25:00
掌声~~
昵称: slackware  时间: 2004-06-01 15:09:00
我也喜欢按这样的风格写.
昵称: polofigo  时间: 2004-06-01 17:35:00
...

永远的初学者[/COLOR]
昵称: aplapl  时间: 2004-06-02 15:26:00
好东西
昵称: rich88  时间: 2004-06-02 20:00:00
看多,不错~~~~~~~
昵称: czwu  时间: 2004-06-05 13:56:00
这个论坛好好哦,虽然很多都不懂!
昵称: 山间小溪  时间: 2004-06-08 16:58:00
安全比效率重要
昵称: luckcc  时间: 2004-06-08 22:06:00
学习 学习 再学习
昵称: txdesign  时间: 2004-06-13 14:42:00
好强一贴!!受益匪浅。我是初学者。昨天自己写一小留言簿,就因为error report问题搞得头大,一直爆warning,后来改为不是全部错误都爆才好的。

呵呵,那十句话很经典,谢谢!
昵称: 一只傻鱼  时间: 2004-06-15 17:14:00


QUOTE:
最初由 开心果 发布
[B]宽带一出。。。。万事俱休 [/B]
白日做梦
昵称: bingle  时间: 2004-06-18 15:21:00
我刚刚学习php,可是不知道改从那入手,请大家多多指教
昵称: jsj792004  时间: 2004-06-18 18:53:00
我也刚学,请大家多多指教
昵称: 火龙sky2号  时间: 2004-06-19 16:35:00
学习!
昵称: 狂龙书生  时间: 2004-06-21 19:57:00


QUOTE:
最初由 帅的像人渣 发布
to 楼主: 对于你所说的擅于用"引用", 速度更快.本人可不敢苟同.
人家不是打上引号了吗?

猪头说过,一个软件的好坏,与抽象的数量和质量有着莫大的关联

楼主的“引用”,不像是简单地指include/require

偶得理解
昵称: 开心果  时间: 2004-06-23 02:06:00
不错。。学习了。
昵称: 边个够我惨  时间: 2004-06-23 17:16:00


QUOTE:
最初由 wormbaby 发布
[B]思:从一点一滴做起。 [/B]
所楼主才说要善于引用阿,又不是能引用就全引用
不过谢谢wormbaby 让我知道哪些地方不适合引用
谢谢你们俩
昵称: 卒仔  时间: 2004-06-28 16:14:00
怎么不继续写下去呢?!!
昵称: 水若寒  时间: 2004-06-28 18:05:00
学习中~~~~
昵称: noHER  时间: 2004-06-30 10:30:00


QUOTE:
最初由 开心果 发布
[B]。。。。。。。。

不打算再在技术版多说什么

只是每次看到一堆人在PHP版为JS特效喝彩、不谈工程框架设计思路谈小数点后好几位的比拼、不讲信仰讲生活。。。。就感到心寒

这就是中国PHP,这就是中国特色的开源社区 [/B]
说的是
A HOWTO on Optimizing PHP
昵称: phppp  时间: 2004-06-30 11:11:00
佩服!
昵称: 风无影  时间: 2004-07-01 09:33:00


CODE:
[Copy to clipboard]
<?php
$query 
"SELECT `flash_comment`.`content` , `flash_comment`.`nickname` , `flash_comment`.`date` , `flash_comment`.`ip` , `product`.`p_name` , `sgflash`.`fid` 
          FROM `flash_comment` 
          LEFT JOIN `product` ON ( `flash_comment`.`p_no` = `product`.`p_no` ) 
          LEFT JOIN `sgflash` ON ( `product`.`p_name` = `sgflash`.`f_name` ) 
          WHERE `flash_comment`.`p_no` != ''
          ORDER BY `flash_comment`.`date`"
;
?>
昵称: coolsnow001  时间: 2004-07-03 11:13:00


CODE:
[Copy to clipboard]
<?php

function getmicrotime()

   list(
$usec$sec) = explode(" ",microtime()); 
   return ((float)
$usec + (float)$sec); 


//initialize big array1
$bigArray1 = array();

for(
$ii=0$ii<600$ii++) 
{
    
$bigArray1[$ii]=$ii.'value';
}

//initialize big array2
$bigArray2 = array();
for(
$ii=0$ii<600$ii++) 
{
    
$bigArray2[$ii]=$ii.'value';
}

//fuction by reference
function passByRef(&$param
{
    
reset($param);
    while(
$kek=key($param)) 
    {
        
$param[$key] .= '-processed';
        
next($param);
    }
}

//function by copy
function passByCopy($param
{
    
reset($param);
    while(
$kek=key($param)) 
    {
        
$param[$key] .= '-processed';
        
next($param);
    }
}

//Call passByRef 50 times
$startTime getmicrotime();
for(
$ii=0$ii<50$ii++) 
{
    
passByRef($bigArray1);
}
$endTime getmicrotime();
$refTime $endTime-$startTime;

//Call passByCopy 50 times
$startTime getmicrotime();
for(
$ii=0$ii<50$ii++) 
{
    
passByCopy($bigArray2);
}
$endTime getmicrotime();
$copyTime =  $endTime-$startTime;

echo(
'reference time is '.$refTime.'<br>');
echo(
'copy time is'.$copyTime.'<br>');
?>
昵称: coolsnow001  时间: 2004-07-03 11:13:00
我期待着!
昵称: fanfwen  时间: 2004-07-07 22:43:00
向你们看齐!向你们致敬!
昵称: cnruyi  时间: 2004-07-10 09:28:00
很好,很受启发!但本人有两个观点和楼主不同:
1、只有动手才会有提高。所以无论是论坛或是其他什么程序都可以尝试着去写,在写的过程中会让你思考,会让你尝试各种各样方法,你的能力也就自然的提高了。当然只是叫嚷是没有用的。
2、三元运算子给人一种不清晰的感觉。我感觉让程序清晰比效率更重要。
昵称: grw  时间: 2004-07-11 08:05:00
感觉不错,学到一点东东,
不过只有先解决温饱再说小康了,脚踏实地。
昵称: bjbs_270  时间: 2004-07-23 12:53:00


QUOTE:
最初由 开心果 发布
[B]人家不是打上引号了吗?

猪头说过,一个软件的好坏,与抽象的数量和质量有着莫大的关联

楼主的“引用”,不像是简单地指include/require

偶得理解 [/B]
老大,根本就不是指include/require,而是&
昵称: mgirl  时间: 2004-07-25 11:14:00
刚刚开始,请大家多多指教!!!!!!
昵称: 艳儿  时间: 2004-07-25 17:33:00
哈哈,看了后解决了我一个问题,谢谢
昵称: yema  时间: 2004-07-28 10:03:00


QUOTE:
最初由 grw 发布
[B]很好,很受启发!但本人有两个观点和楼主不同:
1、只有动手才会有提高。所以无论是论坛或是其他什么程序都可以尝试着去写,在写的过程中会让你思考,会让你尝试各种各样方法,你的能力也就自然的提高了。当然只是叫嚷是没有用的。
2、三元运算子给人一种不清晰的感觉。我感觉让程序清晰比效率更重要。 [/B]
跟楼主观点不同
1,写是必须的,但是写前看一下代码还是非常非常有必要的。重要的是了解结构与思想。
2,三元运算,结构非常清晰,是则前,不是则后。
昵称: yema  时间: 2004-07-28 10:06:00
写的好  支持一下
我是php新手 请大家多关照
昵称: wlimoon  时间: 2004-07-30 18:51:00
关注
昵称: RustlingWind  时间: 2004-07-30 19:13:00
好贴~
昵称: hongmo  时间: 2004-08-03 12:31:00
I LIKE I CHOOSE 。GOOD~!
昵称: applee  时间: 2004-08-06 00:23:00
�]甚�N想�f.........�S便一本 php的��都有提及的技巧
不是�f�N出���]甚�N大不了, 而是基本不重要, �π率侄�言是混�y
��老手就是不合乎���T

三元�\算有好肯定也有不好, 既然他不可以完全取代if...else, �榻y一起����之
引用也涉及了公用及私有的���},  而且在框架及��中都是直接�{用, ��之

每��人有自己的生活�L格,  ��程序更是, 我��人而言是���}�s化狂
�O���R�r��量都用上4,5������, 不要和我�f速度
我��告�V你用sun fire 15K 250��cpu去吧, 呵
做n ��循�h都比你的486 ���� echo快

以前用���a程序看��很多都出�e出�e再出�e, 反而外��的就是�y用都�]多大���}
�F在懂了再看原因就是�^份���{效率, 基本�]有考�]太多例外情�r
多���� if...else 都不��用, �@�拥某绦蛟倏煲彩桥�到垃圾桶去踩平

��程序��是�����旱挂磺�, 功能次之, 效率再次, 代�a��法再次

��然sql等技巧都是真理, 不�@����的��出�e率是很高的.....
昵称: mlw3031  时间: 2004-08-10 10:09:00
虽然我现在还无知,感觉介绍的很详细,一些细节的问题都那么的注意!顶
昵称: Gemse  时间: 2004-08-10 19:44:00
说得好!
昵称: SiegfriedDK  时间: 2004-08-11 04:01:00
好好向大家学习,我的水平一定更上一楼!
昵称: shank  时间: 2004-08-11 14:10:00
我就不懂~!适合我,谢谢~!
昵称: lqy730  时间: 2004-08-11 14:12:00
看到这里,我又要发一次誓了,我下决心,学好php
昵称: 金台小子  时间: 2004-08-17 00:00:00
o
昵称: 天天想你  时间: 2004-08-18 21:32:00
我也来顶一下!不过我还只是一个菜鸟了啦!
不大懂就是了!以后多帮忙了哦!
昵称: flyhan  时间: 2004-08-21 12:18:00
顶!
昵称: gzty  时间: 2004-08-28 12:04:00
我们是中国设计之窗,日点击率200多万次,
因发展需要,特诚邀php高手加盟 ,
本站前景广阔,回报丰厚。
有意者请email:newfjm@163.com
标题注明:加盟中国设计之窗

在深圳,可以兼职!
请你们主动与我联系,或留下电话!!!!
昵称: pass2004  时间: 2004-09-01 19:52:00
好好学习 基本功要扎实
昵称: wubai2002  时间: 2004-09-04 20:21:00
学习
昵称: 哈苦瓜  时间: 2004-09-06 10:40:00
看过大家的引用、拷贝测试代码,我猜测,如果引用传递参数进入函数后,如果函数内没有输出,则php底层进行的是指针操作,如果有输出的话,php肯定会临时将当前引用变量的值复制一份过来用于输出。这样的操作多了,就会影响效率。甚至不如一次整个拷贝来的快。但是这也不能确定,因为这跟变量的大小以及执行输出的次数有关。

但是如果函数内部没有输出,引用变量以及函数返回引用,在php底层大概只是进行指针地址的传递,因此效率应该绝对高于复制拷贝。

个人结论:
用于界面显示的函数一般没有返回值,只在函数内部进行界面输出,这种函数尽量不要使用引用来传递变量。
用于系统逻辑层的纯数据传递的函数一般由返回值,返回值以数组,对象为主。这种函数尽量使用引用来传递变量并且注意函数返回引用。


不只对否?
昵称: liubinnet  时间: 2004-09-11 21:18:00
不错
我现在真学习这个
昵称: cennycai  时间: 2004-09-12 15:03:00
很好值得借鉴,
昵称: dreamriver  时间: 2004-09-14 10:35:00
I see Isee,great!!
昵称: hack_yi  时间: 2004-09-25 03:21:00
强,再顶一下
可惜我连C都不会,最.......
昵称: hao123  时间: 2004-09-29 15:27:00
请问访问次数PHP编访问次数怎么写,
昵称: far  时间: 2004-10-02 11:14:00
好帖!!
昵称: hevi  时间: 2004-10-06 00:03:00
OK
昵称: snow685159  时间: 2004-10-08 12:05:00
liulan
昵称: 步步高  时间: 2004-10-15 11:35:00
至理名言
昵称: 五花小鱼  时间: 2004-10-24 11:13:00
都是高人阿,佩服
昵称: redblade  时间: 2004-10-25 23:06:00
你说的PHP引用好像是有两个REQUIRE 和INCLUDE 为什么我们这的服务器不能用呢???
本人保证所说的PHP代码完全正确!!!!!
是不是服务器的问题??????
昵称: ray2003  时间: 2004-10-29 18:55:00
请问:使用left jion,除了速率提高了,还有什么优点呢?
如果链接了几个应该怎么处理?语法?

QUOTE:
最初由 Van.T 发布
[B]

CODE:
[Copy to clipboard]
<?php
//使用LEFT JOIN
SELECT `sgflash`.`f_name`, `sgflash_comment`.`contents`, `sgflash_comment`.`nickname`, `sgflash_comment`.`date`
FROM `sgflash_commentLEFT JOIN `sgflash`
ON (`sgflash_comment`.`fid`=`sgflash`.`fid`)
ORDER BY `sgflash_comment`.`dateDESC LIMIT 010000

//不使用LEFT JOIN
SELECT `sgflash`.`f_name`, `sgflash_comment`.`contents`, `sgflash_comment`.`nickname`, `sgflash_comment`.`date`
FROM `sgflash_comment`, `sgflash`
WHERE `sgflash_comment`.`fid`=`sgflash`.`fid
ORDER BY `sgflash_comment`.`dateDESC LIMIT 010000
?>
测试对比
显示行 0 - 29 (10000 总计, 查询花费 0.6760 秒) 第一次执行用LEFT JOIN
显示行 0 - 29 (10000 总计, 查询花费 1.5532 秒) 第二次执行不用LEFT JOIN
显示行 0 - 29 (10000 总计, 查询花费 0.6655 秒) 第三次执行使用LEFT JOIN
显示行 0 - 29 (10000 总计, 查询花费 1.3730 秒) 第四次执行不合使用LEFT JOIN [/B]
昵称: bopo  时间: 2004-10-31 08:35:00
精深啊!
看来,我的php之路还有很长啊!
昵称: smoon  时间: 2004-10-31 09:36:00
您为什么写的这么专业呢?确实,这不仅仅是一种职业修养问题。
昵称: singlehero  时间: 2004-11-02 14:15:00
习惯决定一切,写程序要养成一个良好的习惯.
昵称: 键步随风  时间: 2004-11-02 16:24:00
4.尽量让你的代码清淅些
如果写成这样,是比较让人头痛的:

CODE:
[Copy to clipboard]
<?php
$foo
=$_post["foo"];
   
$username=$_post["user"]; 
$group=$_POST["group"];
if (
$group=="wheel"){
$username=$username."wheel";
}
?>
同样的代码,这样就比较让人看得舒服了:

CODE:
[Copy to clipboard]
<?php
$foo      
$_post["foo"];
$username $_post["username"];
$group    $_POST["group"];
if (
$group=="wheel")
{
    
$username $username."wheel";
}
?>
当然,有一定基础后,你应该要写成这样:

CODE:
[Copy to clipboard]
<?php
$foo      
= &$_POST['foo'];
$username =  $_POST["group"]!='wheel' $_POST["username"] : $_POST["username"].'wheel';
?>
确实好贴,但个人觉得,上面的还是按第2种写法好一点,看的清楚,虽然第3种更为标准,但是当写了很久的代码,脑子木了的时候,还是第2种直观一些,大家觉得呢?毕竟代码的标准是为了使代码更好看
昵称: Ice_D(real)  时间: 2004-11-04 01:56:00
哈哈,都顶一下,很值得学习啊!!!
昵称: zxf2008  时间: 2004-11-09 14:24:00
昵称: 开花石头  时间: 2004-11-09 23:35:00
大家好初次到来还不太懂呢?多谢指教!
昵称: 阿艺  时间: 2004-11-11 17:46:00


QUOTE:
最初由 dreamriver 发布
[B]看过大家的引用、拷贝测试代码,我猜测,如果引用传递参数进入函数后,如果函数内没有输出,则php底层进行的是指针操作,如果有输出的话,php肯定会临时将当前引用变量的值复制一份过来用于输出。这样的操作多了,就会影响效率。甚至不如一次整个拷贝来的快。但是这也不能确定,因为这跟变量的大小以及执行输出的次数有关。

但是如果函数内部没有输出,引用变量以及函数返回引用,在php底层大概只是进行指针地址的传递,因此效率应该绝对高于复制拷贝。

个人结论:
用于界面显示的函数一般没有返回值,只在函数内部进行界面输出,这种函数尽量不要使用引用来传递变量。
用于系统逻辑层的纯数据传递的函数一般由返回值,返回值以数组,对象为主。这种函数尽量使用引用来传递变量并且注意函数返回引用。


不只对否? [/B]
个人表示同意...
昵称: lalaqi  时间: 2004-11-12 17:13:00
顶一下,学习ing。
昵称: guoli  时间: 2004-11-18 10:48:00
这就是目标!!!!!
昵称: 我的电脑  时间: 2004-11-24 12:41:00
怎么样才算高手啊?
昵称: goldSn0ke  时间: 2004-12-15 17:58:00
php.ini 里把 register_globals=Off 改成 =On
register_globals =   register_global 么?
昵称: zhongli  时间: 2004-12-16 21:45:00
I Like This Game!
昵称: zhongli  时间: 2004-12-16 21:47:00
看了心里有点发虚,本人刚学,还不知道能怎么样呢?努力中……
昵称: 紫禁之巅  时间: 2004-12-22 16:22:00
好!!!
昵称: topcool  时间: 2004-12-24 13:04:00
哎~~怎么就看不懂.......纳闷的很
昵称: 冰冻の红茶  时间: 2004-12-26 10:13:00
学习
昵称: vanrest  时间: 2004-12-29 09:59:00
好东西  呀!!谢谢了
昵称: ufwiqfcu  时间: 2004-12-29 17:33:00
怎么不继续呀!!
昵称: login6532  时间: 2005-01-01 10:24:00
讨论速度是不是有点偏题了。?
每个人的运行环境不同,速度终究是有差异的!

偶希望能尽快看到这篇帖子的后续内容!!
呵呵!
有 同感的 顶一下?!
昵称: songyan  时间: 2005-01-01 20:37:00
支持.
昵称: songyan  时间: 2005-01-01 20:38:00
是应该这样`` 扎实的基础学习以后的东西就块多了!
昵称: songyan  时间: 2005-01-01 20:49:00
强哈
昵称: _寒_  时间: 2005-01-02 10:10:00
感觉还不错了。很有道理的。你也想补两句。
1、个人觉得写一程序时用常用echo 来追数据对调试很有好处。
2、还有了,掌握一定的js知识可能对你写php程序减轻不少前期工作。
昵称: 小煞  时间: 2005-01-02 12:41:00
up,我正有这样的坏毛病哩,努力改进
昵称: 光风霁月  时间: 2005-01-03 21:34:00
我看了2回,好!
昵称: iloveangle  时间: 2005-01-14 15:27:00
不错。看来还真得注意啊~好好学习,天天向上!
昵称: yjll  时间: 2005-01-15 12:24:00
我是菜鸟。。挺多关照。。。谢谢。。
昵称: 傻小子  时间: 2005-01-15 14:05:00
经典阿,看来我害的努力学习,呵呵
昵称: phpnow  时间: 2005-01-19 09:08:00
我也贴两点,从网上摘的,但感觉狠实用,希望对大家有用处:

1,对于不包含规则的字符串替换,使用str_replace(): 要比 ereg_replace()效率高的多

2,PHP和其它很多编程语言一样,可以使用双引号(\"\")来引用字符串,也可以使用单引号()。但是在PHP中,如果使用双引号来引用字符串,那么PHP解析器将首先分析字符串中有没有对变量的引用,有变量的话,将对变量进行替换。如果是单引号,则没有如此复杂――直接将单引号包含起来的所有字符串直接显示出来。显然,在PHP编程中,如果使用单引号引用字符串变量要比使用双引号快速一些。
昵称: redants  时间: 2005-01-24 01:38:00
这些正是我要克服的.
昵称: ministrator  时间: 2005-01-26 00:02:00
唉,我什么时候能写出这样的帖子来啊?
昵称: 漫步阳光  时间: 2005-01-26 10:30:00
想问问  我现在也在入门PHP  我是中专毕业的 也不知道该怎么学 我对英语和高等数学(函数)都不会  大家推荐下 我该怎么学呀
昵称: leeco  时间: 2005-01-28 11:40:00
感觉上就是在说我,哈哈!
昵称: safetin  时间: 2005-02-06 17:13:00
古语有云:“欲速则不达”。
切实是这个道理,
我们不能一味的追求效率,而忽略了过程。
有时候,在写论坛、购物系统的时候,往往还要回过头来查资料,翻笔记。这足已说明,掌握基础是走向更高一层的前提!
磨刀不误砍材工,是有道理的!
昵称: xuxunmeng  时间: 2005-02-08 09:28:00
第一贴 顶@@@@@@@@@@@@
昵称: 神龙居士  时间: 2005-02-10 12:03:00
显示$var的值的高效写法:
<?=$var?>

IF的随意写法:
if ($a<1)$b=1
昵称: bloffice  时间: 2005-02-14 16:54:00
最近在学 php,我用的 php-4.3.9-Win32 + Apache2 + mySQL Server 4.1 + WinXP.
  
  
  
  已经用mySQL 创建了一个数据库,并添加了内容。然后写了个访问数据库的php页,通过I.E 访问时,老是出错。
  
  
  
  Warning: mysql_connect(): Client does not support authentication protocol requested by server; consider upgrading MySQL client in C:\Program Files\Apache Group\Apache2\htdocs\sean\database.php on line 16
  
  
  
  我的第16行是这样的:
  
  
  
  $connection = mysql_connect($host, $user, $pass) or die (“Unable to connect!“);
  
  
  
  
  搞不清楚怎么回事,求斑竹指教!
昵称: undeadbird  时间: 2005-02-15 14:12:00
我也学习学习
昵称: yueyang  时间: 2005-02-18 11:15:00
谢谢楼主指点,高手有云,编程着重于思想!
而语言的精妙则恰好是思想成熟的凭证!

但是我搞不明白为啥register_golbals=Off 这样会有助于学习呢?
昵称: seanysz  时间: 2005-02-18 20:27:00
恩,看到前辈们讨论的非常积极,小弟今后也开始学习PHP了,是专心的200%,我觉得PHP在这些动态网页中是最好的,不知道是否如此,
昵称: youiou  时间: 2005-02-21 16:34:00
学习啊  奋斗啊
昵称: nwletian  时间: 2005-02-23 00:51:00
我是先叫嚣着要写论坛,要写XXX,然后才学PHP+mysql
呵呵。
昵称: bob520  时间: 2005-03-02 02:23:00


QUOTE:
最初由 SiegfriedDK 发布
[B]
以前用���a程序看��很多都出�e出�e再出�e, 反而外��的就是�y用都�]多大���}
�F在懂了再看原因就是�^份���{效率, 基本�]有考�]太多例外情�r
多���� if...else 都不��用, �@�拥某绦蛟倏煲彩桥�到垃圾桶去踩平

��程序��是�����旱挂磺�, 功能次之, 效率再次, 代�a��法再次
[/B]
今天在CSDN看了一篇文章,再次一次体会兄台的这句话。。。
http://www.csdn.net/news/newstopic/19/19566.shtml
昵称: yeoman_z  时间: 2005-03-07 20:43:00
大部分用php的人应该都属于应用层吧
计算机发展到今天,如果不是搞什么大型联机事务处理,技术底层的问题怕是只有少数情况可以用到吧
个人比较喜欢编程,对一般小型应用来说,人性化处理才是最重要,以人为本,方便,实用,稳定,可能会比技术更值得关注吧(略抒愚见)
昵称: haides  时间: 2005-03-12 18:04:00
学习中!!……
昵称: xhhy  时间: 2005-03-23 19:47:00
我正准备学习PHP呢
希望能有一个好的结果
这个贴子不错的
昵称: cysin  时间: 2005-04-08 13:19:00


QUOTE:
最初由 nwletian 发布
[B]谢谢楼主指点,高手有云,编程着重于思想!
而语言的精妙则恰好是思想成熟的凭证!

但是我搞不明白为啥register_golbals=Off 这样会有助于学习呢? [/B]
我来举个小实例

当你使用Off的时候
$_POST["abc"]和$_GET["abc"]可以代表两个不一样的值
而你用On的时候,能吗?当然不能。

使用Off将让程序员从开始就养成一个在任何环境下都能通用的,良好的编程习惯。
昵称: andsky  时间: 2005-04-09 15:16:00
有道理 学习学习
昵称: txkss  时间: 2005-04-13 21:02:00
PHP代码:--------------------------------------------------------------------------------
if ($data[$i]['nickname'])
{
    $nickname =  $data[$i]['nickname'];
}
else
{
    $nickname =  $data[$i]['ip'];
}

--------------------------------------------------------------------------------

可以写成:

PHP代码:--------------------------------------------------------------------------------
$nickname =  $data[$i]['nickname'] ? $data[$i]['nickname'] : $data[$i]['ip'];
这个不是很懂
昵称: jxxysong  时间: 2005-04-15 15:05:00
楼上的这是一个判断赋值的例子
给变量nickname赋值
如果$data[$i]['nickname']为TRUE,则$nickname得到前者的值
如果$data[$i]['nickname']为FALSE,$nickname = $data[$i]['ip']

ps:你哪看到的例子?
昵称: quzn  时间: 2005-04-15 20:25:00
error_reporting
配置错误信息回报的等级。

语法: int error_reporting(int [level]);

返回值: 整数

函数种类: PHP 系统功能




内容说明


本函数用来配置错误信息回报的等级,参数 level 是一个整数的位遮罩 (bitmask),见下表。

遮罩值 表示名称
1 E_ERROR
2 E_WARNING
4 E_PARSE
8 E_NOTICE
16 E_CORE_ERROR
32 E_CORE_WARNING



E_NOTICE 表示一般情形不记录,只有程序有错误情形时才用到,例如企图存取一个不存在的变量,或是呼叫 stat() 函数检视不存在的文件。
E_WARNING 通常都会显示出来,但不会中断程序的执行。这对除错很有效。例如:用有问题的正则表达式呼叫 ereg()。
E_ERROR 通常会显示出来,亦会中断程序执行。意即用这个遮罩无法追查到内存配置或其它的错误。
E_PARSE 从语法中解析错误。
E_CORE_ERROR 类似 E_ERROR,但不包括 PHP 核心造成的错误。
E_CORE_WARNING 类似 E_WARNING,但不包括 PHP 核心错误警告。
昵称: bopo  时间: 2005-04-29 19:55:00
呼,新人,只有看得分,刚入门呢
昵称: Van.T  时间: 2005-05-01 02:05:00
二话不说,一个字,顶,
我是初学者,还没上路,支持!!!1
昵称: dzjzmj  时间: 2005-05-01 14:01:00
本人英语不是很好,怎么才能提高编程水平呢,哪个高手给点意见呢?可以加我qq:75858175来者说是本站的会员
昵称: 闪闪星  时间: 2005-05-13 00:39:00
待续……续呢?
昵称: 失忆的鱼  时间: 2005-05-16 11:13:00
小威菜菜深受教育,感谢大虾的教导呵呵!
昵称: ljquartz  时间: 2005-05-30 23:08:00
值得一回车,车,好车
昵称: 鬼谷子先生  时间: 2005-07-01 03:32:00
???
昵称: 小威菜菜  时间: 2005-07-01 11:07:00
学习
昵称: 纯粹误会  时间: 2005-07-01 18:49:00
新人过来看看, 不错
昵称: ouok  时间: 2005-08-02 16:13:00
程序访问速度要快
如果过慢,任何人也不会有耐心等待的
昵称: maoqi2232  时间: 2005-08-11 21:02:00
今天终于领悟代码风格了
昵称: sky2008  时间: 2005-08-13 10:49:00
转自 http://www.jfox.info/php/a/gF/13769f.html 

 一. 10句话
  1.不要依赖register_global=ON的环境,从你刚懂得配置php运行环境甚至尚不明白register_global的ON/OFF会对自己有什么影响的那天起,就应该勇敢地把它设为OFF.
  2.写程序前看看怎么用error_reporting.
  3.不懂就问本身没错,但你需要在那之前查查手册。
  4.当然,你需要懂得使用手册。手册上找不到答案的时候,应该考虑下网络上的搜索引擎。
  5.刚学会php+mysql之后,不要叫嚷着要写论坛,要写XXX。要明白,刚学会写汉字并不表示你有能力写诗。
  6.在学web编程的时候,你应该先去认识html这个朋友。
  7.有点能力后,试着回答新手的问题,不要看到自己懂的而别人不懂就沾沾自喜,扔下一名“简单,那是基本的东西”就走更要不得。
  8.思考是一个好习惯,不动手去写就等于空想,什么也没有。
  9.写好一段程序,如果觉得很满意,一周后再看一遍,也许你会认为它应该有所改变
linux

  10.有空多看看别人的程序,找出他人的不足或优点,自己掂量。
  
  二. 各取所需
  1.善于使用“引用”,它能直接影响到程序的效率。
  
  2.善于用三元运算子,可以让程式较精简有效率。
  比如:
  
  Code:
  if ($data[$i]['nickname'])
  {
  $nickname = $data[$i]['nickname'];
  }
  else
  {
  $nickname = $data[$i]['ip'];
  }
  
  可以写成:
  
  Code:
  $nickname = $data[$i]['nickname'] ? $data[$i]['nickname'] : $data[$i]['ip'];
  
  3.善于组织if...else...回圈
  比如:
  
  Code:
  $ext_name = strtolower(str_replace(".", "", strrchr($upfilename, ".")));
  if (!empty($type))
  {
  if (!strpos($type, $ext_name))
  {
  echo "Please upload the file of $type form.";
  exit();
  }
  } linux
  
  上面的代码你应该写成这样:
  
  Code:
  $ext_name = strtolower(str_replace(".", "", strrchr($upfilename, ".")));
  if (!($type==='') && strpos($type, $ext_name)===false)
  {
  echo "Please upload the file of $type form.";
  exit();
  }
  
  4.尽量让你的代码清淅些
  如果写成这样,是比较让人头痛的:
  
  Code:
  $foo=$_post["foo"];
  $username=$_post["user"];
  $group=$_POST["group"];
  if ($group=="wheel"){
  $username=$username."wheel";
  }
  
  同样的代码,这样就比较让人看得舒服了:
  
  Code:
  $foo   = $_post["foo"];
  $username = $_post["username"];
  $group  = $_POST["group"];
  if ($group=="wheel")
  {
  $username = $username."wheel";
  }
  
  当然,有一定基础后,你应该要写成这样:
   linux
  Code:
  $foo   = &$_POST['foo'];
  $username = $_POST["group"]!='wheel' ? $_POST["username"] : $_POST["username"].'wheel';
  
  5.编写规范的mysql 语句。
  字段和表名用"`"引起来,避免保留字的影响。
  如果看到下面这样的一个sql query,会让人比较头痛:
  
  Code:
  $query="select `flash_comment`.`content` , `flash_comment`.`nickname` , `flash_comment`.`date` , `flash_comment`.`ip` , `product`.`p_name` , `sgflash`.`fid` from `flash_comment` left join `product` on ( `flash_comment`.`p_no` = `product`.`p_no` ) left join `sgflash` on ( `product`.`p_name` = `sgflash`.`f_name` ) where `flash_comment`.`p_no` != '' order by `flash_comment`.`date`";
  
  同样的一个query,写成这样就令人看得明白得多了:
  
  Code:
  $query = "SELECT `flash_comment`.`content` , `flash_comment`.`nickname` , `flash_comment`.`date` , `flash_comment`.`ip` , `product`.`p_name` , `sgflash`.`fid` unix
  FROM `flash_comment`
  LEFT JOIN `product` ON ( `flash_comment`.`p_no` = `product`.`p_no` )
  LEFT JOIN `sgflash` ON ( `product`.`p_name` = `sgflash`.`f_name` )
  WHERE `flash_comment`.`p_no` != ''
  ORDER BY `flash_comment`.`date`";

转自 http://www.jfox.info/php/a/gF/13769f.html 
昵称: PHP 技术狂人  时间: 2010-08-19 21:42:31