php ++和逻辑运算的细节
2016-04-18 09:52
399 查看
大概的技术大家都会,然后细节决定了高度,今天就来扯扯php的++和逻辑运算符的一些细节:
++我们都知道是给某个变量自增1,但是++分前++和后++;
$a=5;$b=0;
$a++ //a=6;这个是肯定的
$b=$a++;//这个$b等于多少呢? $b=5,因为这个是先赋值然后再对$a++;
$b=++$a;//这个时候$b等于多少呢?这是$b等于6,因为先执行++再赋值;
同理可以得到一些等式:
$a++*4=20;
++$a*4=24;
这些细节有时候就会导致我们程序出bug,而且还不容易报错。
在来一个++和逻辑运算符的组合问题:
if($a>0||++$b>0){
echo $b; $b等于多少?$b等于0;因为||逻辑的执行规则是,只要第一个成立,第二个就不会去执行
}
if($a++>5||$b>0){
//会不会进来?答案是不会,因为先比较,然后$a才+1
}
难得今天比较有雅致,在来撸一撸switch的注意细节:
function test(variable){
switch(variable){
case 1:echo '函数的变量是1;break;
case 2:echo '函数的变量是2;break;
case 3:echo '函数的变量是3break;
default:echo '函数变量不在取值范围';
}
}
test(1)==>毫无疑问会执行case 1:
test('1')==>这个会执行那个?结果是一样执行case1;这个说明了case后面的变量类型如果和传入的参数类型不一样,它会自动转变类型,尽可能的和switch传进来的参数匹配,这里有人可能就会有疑问了,为什么是case后面的那个数类型变了,而不是参数类型变了,如何证明?
别急,现在就来证明一下:
test(true);==>这个会执行哪一个?===》答案是会执行case 1;因为1会直接转为boll型,尽可能和switch的参数匹配,爱动脑筋的小伙伴又说了,true转换后也是得到1啊,不能证明是case 后面的参数转了,要证明这个非常简单,修改一下test函数就好了。
function test(variable){
switch(variable){
case ‘12345’:echo '函数的变量是1;break;
case 2:echo '函数的变量是2;break;
case 3:echo '函数的变量是3break;
default:echo '函数变量不在取值范围';
}
}
看,这样就可以证明了,true转换的话不可能和‘12345’匹配,但是‘12345’转换就可以和true匹配。
到此证明完毕,希望可以给基础不扎实的小伙伴一点小帮助,其实不仅仅是php,js,ruby,asp.net都是一样的,语言很多共通之处,一通百通。
++我们都知道是给某个变量自增1,但是++分前++和后++;
$a=5;$b=0;
$a++ //a=6;这个是肯定的
$b=$a++;//这个$b等于多少呢? $b=5,因为这个是先赋值然后再对$a++;
$b=++$a;//这个时候$b等于多少呢?这是$b等于6,因为先执行++再赋值;
同理可以得到一些等式:
$a++*4=20;
++$a*4=24;
这些细节有时候就会导致我们程序出bug,而且还不容易报错。
在来一个++和逻辑运算符的组合问题:
if($a>0||++$b>0){
echo $b; $b等于多少?$b等于0;因为||逻辑的执行规则是,只要第一个成立,第二个就不会去执行
}
if($a++>5||$b>0){
//会不会进来?答案是不会,因为先比较,然后$a才+1
}
难得今天比较有雅致,在来撸一撸switch的注意细节:
function test(variable){
switch(variable){
case 1:echo '函数的变量是1;break;
case 2:echo '函数的变量是2;break;
case 3:echo '函数的变量是3break;
default:echo '函数变量不在取值范围';
}
}
test(1)==>毫无疑问会执行case 1:
test('1')==>这个会执行那个?结果是一样执行case1;这个说明了case后面的变量类型如果和传入的参数类型不一样,它会自动转变类型,尽可能的和switch传进来的参数匹配,这里有人可能就会有疑问了,为什么是case后面的那个数类型变了,而不是参数类型变了,如何证明?
别急,现在就来证明一下:
test(true);==>这个会执行哪一个?===》答案是会执行case 1;因为1会直接转为boll型,尽可能和switch的参数匹配,爱动脑筋的小伙伴又说了,true转换后也是得到1啊,不能证明是case 后面的参数转了,要证明这个非常简单,修改一下test函数就好了。
function test(variable){
switch(variable){
case ‘12345’:echo '函数的变量是1;break;
case 2:echo '函数的变量是2;break;
case 3:echo '函数的变量是3break;
default:echo '函数变量不在取值范围';
}
}
看,这样就可以证明了,true转换的话不可能和‘12345’匹配,但是‘12345’转换就可以和true匹配。
到此证明完毕,希望可以给基础不扎实的小伙伴一点小帮助,其实不仅仅是php,js,ruby,asp.net都是一样的,语言很多共通之处,一通百通。
相关文章推荐
- 一个关于if else容易迷惑的问题
- PHP5.2.*防止Hash冲突拒绝服务攻击的Patch
- 深入理解PHP之匿名函数
- JSP/PHP基于Ajax的分页功能实现
- 关于PHP通过PDO用中文条件查询MySQL的问题。
- 什么是设计模式
- PHP数据库长连接mysql_pconnect的细节
- Php Installing An Expansion
- php7 读取php.ini[4]
- PHP+Apache在Windows 9x下的安装和配置
- IIS 6 的 PHP 最佳配置方法
- 安装Apache和PHP的一些补充
- Linux Apache+MySQL+PHP
- 建立Apache+PHP+MySQL数据库驱动的动态网站
- PHP 5.3.0 安装分析心得
- apache 环境下 php 的配置注意事项
- ASP.NET、ASP、PHP、JSP之间有什么区别?
- PHP VBS JS 函数 对照表
- C语言实现的统计php代码行数功能源码(支持文件夹、多目录)