php入门第四天

运算符的相关内容可以查php 手册。下面的内容我会写一些细节问题。

算术运算符 递增/递减运算符

<?php

$i = 0;
$x = ($i++); //相当于 $x = $i; $i += 1; 
	
$j = 0;
$y = (++$j); //相当于 $j += 1; $y = $i;
	
$k = 0;
$z = ($k+=1);
	
printf('$i is : %s; $x is %s <br/>', $i, $x);
printf('$j is : %s; $y is %s <br/>', $j, $y);
printf('$k is : %s; $z is %s <br/>', $k, $z);

?>


看下代码,运行后就明白了。递减也是一样的。

php中, ++$i比 $i++的效率要高一些, 当然别的语言不一样, 所以别的语言的循环一般用i++

php还是写成这样好了。

for ($i=0; $i<1000; ++$i);
$i = 0;
while ($i<1000)
{
    ++$i;
}

但是需要赋值的时候, 最好还是不要用递增/递减运算符。

如果想写$x = $i++; 就写成$x = $i; $i += 1;

如果想写$x = ++$i; 就写成$x = ($i+=1);

这样你就有更多的精力去想程序的逻辑,而不是程序的细节。

逻辑运算符

    手册中,运算符优先级那个表格的,逻辑运算符的结合方向都是“左”。这个意思是左边的运算先算,右边的运算后算。

比如计算 flase && true。 左边false了,右边就不用计算了。

计算 true OR flase ,右边也不用计算了。所以可以这样写 

 defined('DAY4') OR define('DAY4', '第四天');

 isset($day4) OR $day4 = '第四天';

(PS: 这是我从Yii这个框架学的——(think in java这本书也有写,这本书比较枯燥,如果你有php或别的有面向对象内容的语言的基础,可以拿这本书作java入门)。但不建议这样写—— false && ($a = 1) OR ($b = 2); 建议还是用if。)


    所以如果你不确定一个值比如$a是否存在,你要这样写 if (isset($a) && $a=='123');

不能把isset写到右边去。

因为逻辑运算符的一些性质,有些人想去掉if语句中的else(居然还有一个反if行动http://www.infoq.com/cn/news/2009/07/anti-if-campaign)

请看下例。

//bool $a,$b

if ($a && $b)

{

}

else

{//实际上是else( ! $a OR ! $b)

}

if ($a OR $b)

{

}

else

{//实际上是else( ! $a && ! $b)

}

第一,else表达的是什么条件,在前面的if有逻辑运符时还要想一下,而且上面代码还是最简单的形式。我记得好像有一回加班,就挂在这上面(尽量不要加班——当然现在连鸡都加班,晚上开灯吃东西,这就是速成鸡;再好的厨师,十分钟做不好法国大餐,如果居然有人做到了,那人就等客户投拆吧)。

第二,如果前面的if条件改了,后面的else会一起改变。而且有的代码if语句很长(就算你自己不这样写,别人也会这样写),或许有人,以全世界计或程序的寿命够长,那么肯定有人(也许不是你,但你的代码肯定会有人会碰)忘改后面的else

if语句中,如果要改了前面的if语句,就要考虑后面的语句。有逻辑运符时或if->elseif有多个时,最好把最后的else写成elseif(多数情况下浪费的性能几乎不计),或写注释——但前面改了后不要忘记改后面的注释。

switch最好也这样。

    编码习惯上,最好用&&OR,也可以像CI一样用ANDOR,一定不要用||,用有的字体时看起来像11或者ll。当然如果用javascript,就只能用||&&了(我有一次在js中用了OR,汗一个)。

比较运算符

参见php手册的比较运算符 和 php类型比较表(这个很重要)。

$a == ''可以理解为 ! isset($a) OR $a==='' OR $a===0 OR $a!==array() 等,所以用松散比较,效率较低,而且较难考虑周道。

所以有一个原则,就是尽量使用 === 全等 和 !== 非全等,高效且能避免意外情况。

再写一些。

if ($a); 等效于  if ($a == true);
  
if ($a === 1)
{
    return true;
}
else
{
    return false;
}

可以改写成 return $a === 1;

$a >= 0 可以理解成 $a>0 OR $a==0

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值