php中的运算符、控制结构
php中的运算符
1. 赋值运算符
2. 算术运算符
3. 比较运算符
4. 字符串运算符
5. 递增运算符
6. 逻辑运算符(异或运算 xor )
7. 三元运算符
8. 位运算符 (移位运算)
10 . echo中','和'.' 的区别
9. 类型转换
1). 布尔值 --字符串
2). 字符串 -- 数字的转换
3). 字符串-- 布尔值的转换
4). 数字 - - 布尔值的转换
5). 数字 --字符串的转换
控制结构
2. if /else 双路分支,双路分支中if/else 中的2 个代码段,必有且只有一段被执行
if/else if/else if……/else 多路分支
3. switch case ,用来比较判断的变量的多种可能值时便于用。
语句1,先执行 且只执行1次
然后 语句2判断,如为真,则执行 代码段; ,然后执行 语句3;
再语句2判断……循环
直到语句2为假,for结束
代码展示
1 //========================================== 2 3 //2. 算术运算 返回原处 4 // 5 //php程序如何进行加减乘除 6 //依次是+ - 7 8 9 $a = 3; 10 $b =5; 11 $c = $a + $b;//这语句话的含义是$a+$b计算结果赋给$c 12 echo $c,'<br />'; 13 echo $b-$a,'<br />'; 14 15 echo $a * $b,'<br />';//计算$a * $b的结果 赋给$c 16 echo $b/$a,'<br />';//计算$b/$a的结果,赋给$c 17 18 //如果是在C语言中,$b,$a,都是整型,因此计算出来的$c也是整型 19 //在php中,变量的值可以随意改变,而且变量的类型也可以改变。 20 // 21 //比如:变量$c是整型,可以突然为之赋一个浮点型值。 22 //因此php称为动态语言。 23 24 25 26 27 //----------------------------------------------------- 28 求余就是 取模 运算 返回原处 29 在计算机里计算除法的时候,算出来2个结果 30 31 商和余数 32 33 */ 34 $a = 3; 35 $b = 5; 36 $c = $b%$a; // 得1 余2 37 echo $c,'<br />'; 38 39 40 //小测试,判断一个数是偶数,还是奇数? 41 //可以对2 取模,余数是1,则为奇数,如果余数为0,则为奇数 42 43 $d = 3; 44 $res = $d % 2; 45 if($res == 1){ 46 echo $d,'是奇数'; 47 } 48 if($res == 0){ 49 echo $d,'是偶数'; 50 } 51 52 //上初中了,有了负数的概念 53 54 $b = -5; 55 $a = 3; 56 echo $b%$a; 57 $b = -5; 58 $a = -3; 59 echo $b%$a; 60 61 //注意:在取模运算的时, 62 //运算的正负结果,取决于被除数的符号 63 //结果的符号,和被除数的符号一致 64 //================================================ 65 66 // 比较运算符 返回原处 67 // > ,< ,<= ,>= ==,!= ,===(不仅值相等,而且类型也相等),!== 68 $a = 3; 69 $b = 2; 70 if(3 > 2){ 71 echo '3大于2','<br />'; 72 }else{ 73 echo '3不大于2','<br />'; 74 } 75 76 if($a >= $b){ // >= 意味着,$a比$b大,或者 $a 等于$b 有一个为真都行,即条件满足 77 echo '3大于等于2','<br />'; 78 }else{ 79 echo '3并不大于等于2','<br />'; 80 } 81 //----------------------------------------------- 82 83 $a = 3; 84 $b = '3'; 85 if($a === $b){ 86 echo $a,'全等于',$b,'<br />'; 87 }else{ 88 echo $a,'不全等于',$b,'<br />'; 89 } 90 91 //========================================== 92 93 $a = 3; 94 $b = true; 95 if($a == $b){ 96 echo $a,'等于',$b,'<br />'; 97 }else{ 98 echo $a,'不等于',$b,'<br />'; 99 } 100 //在不同的类型比较时 101 //php程序本身 102 // 103 //会把变量 转换成一致的类型,然后再去比较 104 // 105 //着重记以下转换 返回原处 106 //1. 布尔值 --字符串 107 //2. 字符串 -- 数字的转换 108 //3. 字符串-- 布尔值的转换 109 //4. 数字 - - 布尔值的转换 110 //5. 数字 --字符串的转换 111 // 112 //以5 ==true 比较为例 113 //的把 整型 ,转成布尔型 114 // 115 //其实有的语言中,根本就没有布尔型,都是拿1,0充当true / false 116 //0 / 0.0 这两个转换为布尔类型为false 117 //其他都是true ,负数也是true 118 119 120 121 122 //------------------------------------------- 123 //1. 布尔值 --字符串 124 true ---'1' 125 false--- '' 126 127 //------------------------------------------- 128 //1. 字符串 --数字的转换 129 //从字符串左端开始找数字,直到第一个非数字结束,取出来的这一部分,即是转换后的值 130 //'3q'----3 131 '123asdf'---123 132 'sdfds789'----0 133 134 $num = 'sdfds789'; 135 echo $num + 0; //运算结果是0 136 137 //------------------------------------------- 138 //3. 字符串 --布尔的转换 139 //''字符串,'0',这种转换成 false 140 //其他的一概是true 141 142 143 144 if(''==false){ 145 echo '空字符串等于false'; 146 }else{ 147 echo '空字符串不等于false'; 148 } 149 150 echo '<br />'; 151 if('0'==false){ 152 echo '字符串0等于false'; 153 }else{ 154 echo '字符串0不等于false'; 155 } 156 157 158 //------------------------------------------- 159 //4. 字符串 --布尔的转换 160 // 只有整型的0 ,和浮点的0.0 ,转换false 161 //其他 ,甚至负数 ,也转换成true 162 163 164 165 //------------------------------------------- 166 //5. 数字 --字符串的转换 167 //直接是字面本身 168 echo '<br />'; 169 echo 'aaa'. 2323; 170 171 172 173 //------------------------------------------- 174 //字符串 返回原处 175 176 //在php中字符串,有一句运算,就是拼接 (echo中','和'.' 的区别) 177 178 $str1 = 'hello'; 179 $str2 = ''; 180 181 $str3 = 'world'; 182 echo $str1.$str2.$str3; 183 echo $str1,$str2,$str3; 184 185 // 新手的疑问 186 187 echo $str1.$str2.$str3; 188 //这一行是$str1,$str2,$str3在内存中拼接运算 189 //运算出一个'hello world'一个大字符串, 190 //然后echo 之,得到判断的结果 hello world 191 //========================================== 192 193 echo $str1,$str2,$str3; 194 //echo 是个语句,负责输出用的 195 //可以通过','分割 一次输出多个变量或值来 196 // 197 //综上: 198 //用' . '是先拼接,再整个输出 199 //用' , ' 是挨个儿把3个变量输出。 200 // 201 //面试时,会碰到 会问法: 202 //用' . ',用' , '那个输出的快,效率高 203 // 204 //答:当然是 ',' 输出快,效率高 206 //========================================== 207 //赋值运算符,就是 = ,作用是,把‘=’右边的值,赋给左边变量 返回原处 208 $a = 3; 209 $b = $c = 5; 210 211 212 //========================================== 213 //运算符的运算结果 214 // 215 //大家想:既然是运算,运算完之后,必须得有一个结果 ---结果值 216 //3 + 2; 运算结果5 217 // 218 //1. 比较运算符 返回原处 219 //注意 :比较去处符返回结果,,只有2个可能 true/false 220 // 221 //以$a == $b 为例,,要么等,要么不等 222 //要么是真,要么是假 223 //2 ==3;运算结果是:false 224 225 //========================================== 226 //2. 字符串运算符 返回原处 227 //字符串运算符 228 //$a.$b 229 //返回结果:拼接后的结果 230 231 //========================================== 232 //赋值运算符,返回值是多少呢? 233 $a = 3; 234 if($a = 33){ 235 echo 'aa'; 236 }else{ 237 echo 'bb'; 238 } 239 //赋值运算长符的运算结果,就是 =右边的值 240 $a = $b = $c =88 241 //过程是这样的, $b = 88先进行,赋值后返回88 242 //返回的88,再赋给$c 243 //同理 …… 244 //最终$a也赋值为88 245 // 246 // 247 //两个难点; 248 //1. 比较运算时,有一个类型转换的问题 249 //2. 凡运算,必有返回值 250 //比较运算返回布尔值 251 // 252 //赋值运算,返回赋的值本身 253 254 //========================================== 255 //6. 逻辑运算符 返回原处 256 // 257 //命题: 258 //真命题,假命题 259 // 260 //逻辑运算符:逻辑或 || or 261 //逻辑与 && and 262 263 $house = 180; 264 $car = 'BYD'; 265 266 //$res = $house && $car == 'BMW'如果这样写,谁先给结合 ,牵涉到运算优先级的问题 267 //我们推荐,在多个量进行去处的时候,需要先在一块的单元,用()包起来。如:$res = $house && ($car == 'BMW') 268 //这样可以 使程序易读,易理解 ,不容易产生歧义 269 if($res = $house && $car == 'BMW'){ 270 echo '还是可以嫁'; 271 }else{ 272 echo '再等两年'; 273 } 274 275 逻辑运算的优先级 276 && 的优先级 比 ||高 277 但是在开发中,不推荐写在一起,应用()包起来 278 $a = 3; 279 $b = 5; 280 if(($a==8)||($b=9)){ 281 $a++; 282 $b++; 283 } 284 echo $a,'<br />',$b; 285 286 //========================================== 287 288 //逻辑反 289 //一个命题如果是真命题,则其反命题,是假命题 290 //用!表示 291 292 //========================================== 293 //异或运算 xor 返回原处 294 //异或是指,两个条件必须‘一个真’,‘一个假’,才为真 295 296 $li = '男'; 297 $mei = '女'; 298 //这个异或表达的是,必须一个为男, 299 if($li == '男') xor ($mei == '男'){ 300 echo '可以结婚'; 301 }else{ 302 echo '法律禁止,请去北欧'; 303 } 304 305 306 //========================================== 307 //三元运算符 返回原处 308 // 309 //条件?返回值1:返回值2 310 //如果条件为真,则返回值1,否则返回值2 311 // 312 // 313 //比如,在网站中判断一个人有没有登陆 314 //如果登陆,用户名不为空,则显示其用户名 315 //如果没登陆,用户名空,则显示游客。。 316 317 //$user = 'zhangsan'; 318 //if(!=''){ 319 // echo $user; 320 //}else{ 321 // echo '游客'; 322 //} 323 // 324 //$user = 'zhangsan'; 325 //echo $user?$user:'游客'; 326 327 //程序如果没有三元运算符,可以用什么代替? 328 // 329 //可以用if/else代替 330 //三元中是一个简化的写法 331 //而且效率没有 if/esle高 332 333 334 //========================================== 335 //递增,递减运算符 返回原处 336 // 337 //就是语言中没有递增,递减,也不会影响我们写程序。 338 //也是一些场景的简化写法 339 340 //分析,$b + 1是一个算术运算,算出的结果是3,这个3是一个‘算出结果’,和$b没有关系 341 //这个算出结果,值给了$a 342 //因此,$a为3,$b为2 343 $b = 2; 344 $a = $b +1; 345 echo $a,'~',$b,'<br />'; 346 347 //$b++,这是一个递增运算,去处则必有去处结果, 348 //问题: $b++的运算结果是什么? 349 //答:$b++,运算结果是$b本身 350 //然后再把$b的值+1 351 //就相当于return $b; $b = $b +1; 352 //$b =1; 353 //$a = $b++; 354 //echo $a,'<br />',$b; 355 // 356 // 357 //========================================== 358 /*位运算符,说白了,就是,二进制运算符 返回原处 359 //人有10个指头,用10进位,便于计算 360 // 361 //玛雅人,不穿鞋,连脚趾也算上,20进位 362 //进位是多少没关系,关键是方便我们我们使用 363 // 364 //对于计算机来说,所有的位,都 只有两种状态 0 1 365 //因为百进位上 ,1代表100 366 //10进位上,1代表10 367 //个位,1代表1 368 // 369 //我们知道计算机里的信息,都是以0,1来存储的 370 //一个可以存储0/1单元,称为位bit 371 // 372 //8个位组成一个字节,Byte 373 //字节是计算机里最基本的单位。 374 375 376 12 = 8 + 4; 377 =1*2^3+1*2^2+0*2^1+0*2^0 378 =1100 379 5=101 380 但是计算机里,最基本的单位就是字节,有8个位,只用了3个怎么办? 381 答:把用的3个或4个位,写在字节的右边 382 左边的这些位,用0补上。 383 因此,计算机里: 384 12=0000 1100 385 5 =0000 0101 386 387 388 12 & 5 = 0000 0100 = 4 389 12 | 5 = 0000 1101 = 13 390 12 ^ 5 = 0000 1001 =9 391 按位运算符 392 &按位且 ,把2个二进制值齐,把1看成true ,把0看成false,然后每个位上都做 并且 的运算。 393 |按位或 , 把2个二进制值齐,把1看成true ,把0看成false,然后每个位上都做 或者 的运算。 394 395 ^按位异或 把2个二进制值齐,把1看成true ,把0看成false,然后每个位都不一样时做 异或 的运算。 396 397 398 提醒大家:计算机是按位算,我们操作,往往直接10进制 399 */ 400 //========================================== 401 402 $a = 12; 403 $a = 0000 1100 404 //按位求反 405 $a = 1111 0011 406 echo ~12 407 //计算机里表示负数,是用补码的规则来计算的 408 //具体这样来计算负数,假设有8位 409 //最高位是1,得出符号是负 410 // 411 //开始补码规则 412 //计算除符号位之外,其他7位的绝对值 413 //(1)111 0011 =115 414 //然后把 绝对值-2^7 = 115 -128 = -13 415 // 416 //因此: 417 //1000 0001 ---不要想当然是 -1 418 //而是 1-2^7 = -127 419 1111 1111 --- 127-128 = -1 420 1000 0000 --- 0-128 =-128 421 422 0000 0000 --- 0 423 0111 1111 --- 127 424 425 //为什么有人问:-128 +127 426 // 427 //直观来理解 428 //-128 --- 0 0 --- 127 429 //位运算,掌握更好,掌握的不熟悉也不要纠结 430 431 432 //========================================== 433 //移位运算 返回原处 434 435 5 = 0000 0101; 436 5 << 1; //左移 437 //相当于乘2的效果 438 0000 1010; //得到的结果是10 439 5 >> 1; //右移 440 0000 0010 441 //相当于除2的效果 442 443 444 //========================================== 445 //之前学习了‘量’---变量,常量 446 //量与量之间,可以运算,运算符 447 // 448 //如果只有量与量与的运算,那么我们学的知识只够做一个计算器 449 450 //========================================== 451 //想写程序:还得有控制结构 452 // 453 //控制结构,就是条件与逻辑,控制代码的执行顺序 454 // 455 //程序员 是用php --- 培训 --- 计算机 456 //如果 --- if 457 //否则如果 ---else if 458 //否则 ---- else 459 $gender = $_GET['gender']; 460 if(){ 461 }else{ 462 463 } 464 //========================================== 465 466 //有几种控制结构 467 //答 : 1. 顺序 、 2. 分支 、 3. 循环 468 //这个3种控制结构 469 //所有语言都这样 返回原处 470 471 //========================================== 472 // 1. 顺序 473 // 顺序结构就是语句按照你书写的顺序,从前到后顺序执行。 474 // 最容易理解 475 echo 'a:8点了','<br />'; 476 echo 'b:来YY:88354001','<br />'; 477 echo 'c:我听懂了','<br />'; 478 echo 'd:我开始写博客了','<br />'; 479 480 //========================================== 481 // 2. 分支 返回原处 482 //顾名思义:有分支 ,就像一条大路,走了3岔口,该选择一个走下去了。 483 //最简单的,单路分支 484 485 //单路分支 486 $age = 18; 487 if($age >= 18 ){ 488 echo '你已成年'; 489 }//这个if中的代码,要么执行,要么不执行 490 //括号中的表达式,如果为真,则执行,否则,不执行 491 ------------------------------------------- 492 //双路分支 if /else 493 $year = 2012; 494 $birth = 1987; 495 $age = $year - $birth 496 if($age > 28){ 497 echo '你是中老年'; 498 }else{ 499 echo '你是有为青年'; 500 } 501 //if为真,则代码段1执行 502 //if为假,则代码段2执行 503 //if else 中的两个代码,有且只有一个执行。 504 //------------------------------------------- 505 //多路分支 506 $age = 34; 507 if( $age <=16 ){ 508 echo '中年'; 509 } else if($age > 16 && $age <= 28){ 510 echo '老年'; 511 }else if( $age >28 && $age <=300){ 512 echo '其他'; 513 } 514 ------------------------------------------- 515 //switch 分支语句 返回原处 516 517 $day = 2; 518 if($day == 1){ 519 echo '星期一'; 520 }else if($day == 2){ 521 echo '星期二'; 522 }else if($day == 3){ 523 echo '星期三'; 524 }else if($day == 4){ 525 echo '星期四'; 526 }else if($day == 5){ 527 echo '星期五'; 528 }else if($day == 6){ 529 echo '星期六'; 530 }else if($day == 7){ 531 echo '星期日'; 532 }else{ 533 echo '不存在'; 534 } 535 //对于一个变量的值,有多种可能性,用if / if else 来比较,当然是可以的。 536 //但是,有一种,更简单的分支结构来替换他 537 538 539 $day =2; 540 switch($day){ 541 case 1: 542 echo '星期一'; 543 break; 544 case 2: 545 echo '星期二'; 546 break; 547 case 3: 548 echo '星期三'; 549 break; 550 case 4: 551 echo '星期四'; 552 break; 553 case 5: 554 echo '星期五'; 555 break; 556 case 6: 557 echo '星期六'; 558 break; 559 case 7: 560 echo '星期日'; 561 break; 562 default: 563 echo '其他'; 564 }//从上到下,判断$day和case指定的值,是否相等,如果相等,就执行以后的语句,否则就不执行。 565 //因此,一定要用break退出 566 //如果没用switch case的话我们可以用什么替换? 567 // 568 //答:if / else if else 来替换 , 569 // 570 //问:switch case ,与,if/esle if/else 相比,各适合什么 样的场合? 571 //switch case 只能判断某变量是否与指定的值相等 572 // 573 //比如:值 1,2,3,4…… 574 //但是不能用来判断范围 575 // 576 //而if/ else if /else 可用来判断 范围,甚至更复杂的判断表达式,也可以 577 //而case ,却只能提供一个准备的值,和变量做相等的比较。 578 //如果 需要和几个确认的值比较是否相等,适合用switch\ 579 580 //========================================== 581 582 //循环结构 583 //编程语言,一般都有for , while , do /while 循环 584 // 585 //先看while 返回原处 586 //while(表达式){ 587 // 语句; 588 //} 589 //判断表达式是否为真,如果为真,则执行语句 590 //执行完语句之后,再回到while 开始处,判断表达式是否为真 591 //如果为真…… 592 //………… 593 //…… 594 //如果假,本次循环结束 595 596 $hard = 100; 597 $hit = -1; 598 599 while($hard >= 30){ 600 $hard = $hard + $hit; 601 if($hard >=30){ 602 echo '不服','<br />'; 603 }else{ 604 echo '服了','<br />'; 605 } 606 } 607 echo $hard,'服了吧'; 608 ------------------------------------------- 609 while(){ 610 }// 也有一次都不执行的,第一次条件就不成立,直接退出。 611 $hard = 20; 612 $hit = -1; 613 614 while($hard >= 30){ 615 $hard = $hard + $hit; 616 if($hard >=30){ 617 echo '不服','<br />'; 618 }else{ 619 echo '服了','<br />'; 620 } 621 } 622 623 //------------------------------------------- 624 // 625 //如果碰到下面的情况 626 while(true){ 627 echo 'haha<br />'; 628 }//死循环 629 ------------------------------------------- 630 do{ 返回原处 631 632 }while(); 633 //do ,即执行,上来先执行一下语句,然后再去判断 634 //所有,do/while 到至少执行一次 635 636 $hard = 20; 637 $hit = -1; 638 do{ 639 $hard = $hard + $hit; 640 if($hard >=30){ 641 echo '不服','<br />'; 642 }else{ 643 echo '服了','<br />'; 644 } 645 }while($hard>=30); 646 647 //========================================== 648 //for(语句1;语句2;语句3){ 返回原处 649 // 代码段; 650 //} 651 //语句1,先执行 且只执行1次 652 //然后 语句2判断,如为真,则执行 代码段; ,然后执行 语句3; 653 // 654 //再语句2判断……循环 655 //直到语句2为假,for结束 656 // 657 //------------------------------------------------------- 658 //打印1到100的整数,如果是3的倍数就打印Fizz,如果是5的倍数就打印Buzz 659 //如果是3和5的倍数就打印abcd 660 $i = 0; 661 while(++$i<=100){ 662 if($i%15 == 0){ 663 echo $i,'----abcd----即是3的倍数,又是5的倍数','<br />'; 664 }else if($i%3 == 0){ 665 echo $i,'----FiZZ----3的倍数','<br />'; 666 }else if($i%5 == 0){ 667 echo $i,'----BuZZ----5的倍数','<br />'; 668 }else{ 669 echo $i,'<br />'; 670 } 671 } 672 ------------------------------------------------------- 673 674 //公鸡 5元1只,小鸡1元3只,母鸡 3元1只 675 //100元买回100只,问公鸡,母鸡,小鸡各多少只? 676 for ($g = 1;$g<=20;$g++){ 677 for($m = 1;$m<=34;$m++){ 678 $x = 100-$g-$m; 679 if(5*$g+3*$m+$x/3 == 100){ 680 echo '公鸡',$g,'只,','母鸡',$m,'只,','小鸡,',$x,'只,<br />'; 681 } 682 } 683 } 684 //========================================== 685 // 686 //break 有破坏的意思,直接破坏整个循环语句,不再往下执行了。 687 688 for($i = 1;$i < 10;$i++){ 689 if($i == 6){ 690 break; 691 }else{ 692 echo $i,'<br />'; 693 } 694 } 695 -------------------------------------------------------- 696 //continue 有继续的意思,跳出本次循环,继续执行下一次循环 697 for($i = 1;$i < 10;$i++){ 698 if($i == 6){ 699 continue; 700 }else{ 701 echo $i,'<br />'; 702 } 703 } 704 705 -------------------------------------------------------- 706 //过收费站,手上有钱100,000元,当钱>50000时,交手上钱数的5%元,当钱数<=50,000时,每次交5000元,问能过几次? 707 for($i=0,$money = 100000;$money >= 5000;){ //看此处,第2个‘;’号后竟然是空//的 708 if($money>50000){ 709 $money *= 0.95; 710 }else { 711 $money -= 5000; 712 713 } 714 $i+=1; 715 echo '第', $i,'过桥后','剩下的钱数为',$money,'<br />'; 716 } 717 718 719 //如下 720 for(){ 721 echo 'haha'; 722 //别运行,死循环 723 } 724 725 726 */
相关的视频连接:
1. 位运算符 ,移位运算
2.三大控制结构之顺序和分支
/**
燕十八 公益PHP培训
课堂地址:YY频道88354001
学习社区:www.zixue.it
**/