Blogger Information
Blog 128
fans 9
comment 5
visits 241264
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
【php基础入门】运算符、流程控制语句及单双引号和模块化编程的使用详解
 一纸荒凉* Armani
Original
765 people have browsed it

字符串的单引号和双引号区别

字符串的插值

  1. 双引号中的字符串,更像一个模板
  2. 这个模板中除了字面量以外,还可以有变量和转义字符
  3. 模板中的需要给变量提供一个边界区分字面量{}
  4. 单引号的解析速度理论上比双引号快
  1. <?php
  2. $name = "华硕电脑";
  3. $price = 5199;
  4. echo "品名:".$name."<br>价格:".$price."元<br>";
  5. // \n 换行 \r 回车 \t tab \\ \$ \'
  6. // 注意:单引号只能识别2个转义字符 \' , \\
  7. // 单双引号区别:字符转移、变量解析、运行速度。
  8. // 注意:这里的转义字符\n 在HTML中就是一个空格
  9. // nl2br()他会在\n前面自动插入一个<br>
  10. $template = nl2br("品名:{$name}\n价格:{$price}元<br>");
  11. echo $template;
  12. /*
  13. 品名:华硕电脑
  14. 价格:5199元
  15. 品名:华硕电脑
  16. 价格:5199元
  17. */
  18. // 定界符-----------------------------
  19. //Heredoc 方式声明字符串
  20. $url = " http://zhang.com/0427/demo.php";
  21. $str = <<< EOF
  22. 我的
  23. url:{$url}
  24. EOF;
  25. echo $str3; // http://zhang.com/0427/demo.php
  26. // heredoc: 双引号字符串替代语法
  27. // 比较适合输出大量的多行内部存在变量的html代码
  28. echo <<< SHOW
  29. <table border="1" width='200'>
  30. <tr>
  31. <th>品名</th>
  32. <th>价格</th>
  33. </tr>
  34. <tr>
  35. <td>{$name}</td>
  36. <td>{$price}</td>
  37. </tr>
  38. </table>
  39. SHOW;
  40. // SHOW: 必须要写在第一列最开头顶格,必须要与起始的名称一致
  41. // nowdoc:单引号替代语法
  42. echo <<< 'EOF'
  43. <table border="1" width='200'>
  44. <tr>
  45. <th>品名</th>
  46. <th>价格</th>
  47. </tr>
  48. <tr>
  49. <td>手机</td>
  50. <td>1599</td>
  51. </tr>
  52. </table>
  53. EOF;
  54. // nowdoc:适合大段的多行的字符串字面量的输出
  55. ?>

总结:

  • 在 PHP 代码中尽量用单引号;
  • 字符串中包含变量的时候,使用双引号可以简化操作;
  • 如果字符串比较复杂且包含变量时,将变量使用大括号包裹起来;
  • 字符串中不需要加入变量或者转义字符时,尽量用单引号定义字符串。
  • heredoc定界符开始标记后不能出现空格或多余的字符,结束标记必须顶头写,不能有缩进和空格,且在结束标记末尾要有分号。

PHP 运算符

运算符是指通过一个或多个表达式来产生另外一个值的某些符号,如“+”、“%”、“.”等都是运算符。

算数运算符


  1. <?php
  2. $a = 10;
  3. $b = 2;
  4. echo $a+$b; // 12 加
  5. echo $a-$b; // 8 减
  6. echo $a*$b; // 20 乘
  7. echo $a/$b; // 5 除
  8. echo $a%4; // 2 求余
  9. echo -6%4; // -2
  10. // 判断今年是否为闰年 (年份能被4整除,但不能被100整除,或者能被400整除)
  11. $year = date("Y");
  12. if($year%4==0&&$year%100!=0||$year%400==0){
  13. echo "{$year}年是闰年";
  14. }else{
  15. echo "{$year}年是平年";
  16. }
  17. // 生成一定范围内的随机数 0~100
  18. echo mt_rand()%101;
  19. echo mt_rand(0,100);
  20. // 自增自减运算符
  21. $a = 10;
  22. echo $a++,"---",$a; // 10---11 先返回输出完在自增
  23. echo ++$a,"---",$a; // 12---12 先自增完在返回输出
  24. // 自减同理
  25. echo $a--,"---",$a; // 12---11
  26. echo --$a,"---",$a; // 10---10
  27. // 幂运算
  28. printf("2的4次方=%d<br>",2**4); // 2的4次方=16
  29. ?>

字符运算符

  1. <?php
  2. // 英文的 . 和 , 来连接字符串
  3. echo "a"."b"."c"; //abc
  4. $str1 = "Hello";
  5. $str2 = "World";
  6. echo $str1,"&nbsp;",$str2; //Hello World
  7. $newStr = $str1,$str2;
  8. echo $newStr; //提示语法错误因为 “,” 是echo语句特有的
  9. $newStr = $str1."&nbsp;".$str2;
  10. echo $newStr; //Hello World
  11. ?>

关系运算符

  1. <?php
  2. $a = 10;
  3. $b = 3;
  4. var_dump($a>$b); // bool(true)
  5. var_dump($a=2); // int(2) = 赋值,将等号右边赋值给左边
  6. var_dump($a=="2"); // bool(true) == 值等于,类型不同会自动转换
  7. var_dump($a==="2") // bool(false) === 全等于,必须类型和值完全相同
  8. // strpos()查找指定字符串出现的位置
  9. $str = "abcdefg";
  10. $pos = strpos($str,'h');
  11. // false 0 true 1
  12. echo $pos===false? "未查找到指定字符!": "查找成功!";
  13. ?>

逻辑运算符

  1. <?php
  2. // x && y 与 如果 x 和 y 都为 true,则返回 true (&&===and)
  3. var_dump(3>2&&5>1); // bool(true)
  4. // 短路求值,第一个为假,第二个&&3>2永不执行
  5. var_dump(2>3&&3>2); // bool(false)
  6. var_dump(3>2&&2>3); // bool(false)
  7. // x || y 或 如果 x 和 y 至少有一个为 true,则返回 true (||===or)
  8. var_dump(3>2||2>3); // bool(true)
  9. // ! x 非 如果 x 不为 true,则返回 true
  10. var_dump(!(3>2)); // bool(false)
  11. $username = "admin";
  12. if(isset($username)&&$username === "admin"){
  13. echo "欢迎管理员".$username;
  14. }else{
  15. echo "请登录";
  16. }
  17. unset($username); // 退出登录
  18. echo !empty($username)?"欢迎登录成功!":"请登录";
  19. ?>

赋值运算符

  1. <?php
  2. // x = y x = y 左操作数被设置为右侧表达式的值
  3. $a = 18;
  4. // x += y x = x + y 加
  5. $a += 2; // $a = $a + 2;
  6. // x -= y x = x - y 减
  7. $a -= 2; // $a = $a - 2;
  8. // x *= y x = x * y 乘
  9. $a *= 2; // $a = $a * 2;
  10. // x /= y x = x / y 除
  11. $a /= 2; // $a = $a / 2;
  12. // x %= y x = x % y 模(除法的余数)
  13. $a %= 2; // $a = $a % 2;
  14. // a .= b a = a . b 连接两个字符串
  15. $a .= 2; // $a = $a.2;
  16. $str = "zhang";
  17. $str .= ".com"; // zhang.com
  18. ob_clean();
  19. $list = "<ul>";
  20. for ($i=1; $i < 5; $i++) {
  21. $list .= sprintf("<li>item%d</li>",$i);
  22. }
  23. $list .= "</ul>";
  24. echo $list;
  25. /*
  26. <ul>
  27. <li>item1</li>
  28. <li>item2</li>
  29. <li>item3</li>
  30. <li>item4</li>
  31. </ul>
  32. */
  33. ?>

错误抑制符

抑制错误输出,同过@符号加到会产生错误的表达式之前,该表达式可能产生的任何错误信息都被忽略掉。

  1. <?php
  2. $var = 123;
  3. @settype($var,"undefined"); // php 中没有undefined类型,不加上@肯定会报错
  4. echo gettype($var);
  5. echo var_export($var);
  6. ?>

三元运算符

  1. <?php
  2. // (expr1) ? (expr2) : (expr3)
  3. // 如果exp1为真,执行?之后的exp2,否则执行:之后的exp3
  4. $a = 12;
  5. $b = 45;
  6. $c = $a>$b?1:0;
  7. echo '$c='.$c ;
  8. // 检测页码 默认第一页
  9. // $page = isset($_GET['page'])?$_GET['page']:1;
  10. // $page = @$_GET['page']?$_GET['page']:1;
  11. // null 合并运算符? 给null变量一个默认值
  12. $page = $_GET['page']??1;
  13. echo "当前是第".$page."页";
  14. // 太空舱运算符--------
  15. $a = 15;
  16. $b = 25;
  17. // if($a>$b){
  18. // echo 1;
  19. // }elseif($a<$b){
  20. // echo -1;
  21. // }else{
  22. // echo 0;
  23. // }
  24. // a<b -1 a>b 1 a=b 0
  25. echo $a <=> $b;
  26. ?>

PHP 流程控制

PHP 提供了一些流程控制的替代语法,包括 if,while,for,foreach 和 switch。替代语法的基本形式是把左花括号({)换成冒号(:),把右花括号(})分别换成 endif;,endwhile;,endfor;,endforeach; 以及 endswitch;
详情请查看此处

分支语句

判断条件是否满足从而执行相应的语句代码

if else语句 单分支

  1. <?php
  2. // if(exp) 执行一句代码
  3. ifexp){
  4. // 代码段;
  5. }
  6. // if...else
  7. if(exp){
  8. // exp为true时执行代码段;
  9. }else{
  10. // exp为false时执行代码段;
  11. }
  12. // if...elseif...else
  13. if(exp1){
  14. // exp1为true时执行代码段;
  15. }else if(exp2){
  16. // exp2为true时执行代码段;
  17. }elseif(exp3){
  18. // exp3为true时执行代码段;
  19. }else{
  20. // 以上exp都为false时会执行到此;
  21. }
  22. // if嵌套的形式
  23. if(exp){
  24. // 代码段;
  25. }else{
  26. // 代码段;
  27. if(exp){
  28. if(exp){
  29. // 代码段;
  30. }else{
  31. // 代码段;
  32. }
  33. }
  34. }
  35. // ------------------
  36. // 模板语法:为了提高混合代码(HTML php)的整洁性
  37. if(boolean):
  38. echo "string";
  39. else:
  40. echo "string";
  41. endif;
  42. <? if(true): ?>
  43. <?= "<p>早上好</p>" ?>
  44. <? else: ?>
  45. <?= "<p>晚上好</p>" ?>
  46. <? endif ?>
  47. ?>

switch语句 多分支

  1. <?php
  2. switch(exp){
  3. case 1:
  4. // 代码段;
  5. break;
  6. case 2:
  7. // 代码段;
  8. break;
  9. ...
  10. default:
  11. // 代码段;
  12. }
  13. // 当exp与case的值相同时,执行代码段
  14. // 比对的时候是松散比对即 == 如 1(int) == "1"(str)
  15. $d = date("w");
  16. switch ($d):
  17. case '1':
  18. echo "今天是星期一";
  19. break;
  20. case '2':
  21. echo "今天是星期二";
  22. break;
  23. case '3':
  24. echo "今天是星期三";
  25. break;
  26. case '4':
  27. echo "今天是星期四";
  28. break;
  29. case '5':
  30. echo "今天是星期五";
  31. break;
  32. default:
  33. echo "今天是周末啦!";
  34. break;
  35. endswitch;
  36. ?>

循环语句

重复的事情或者有规律的事情要想到用循环

for循环语句

  1. <?php
  2. for(exp1;exp2;exp3){
  3. # code...
  4. }
  5. // exp1相当于初始化赋值,会无条件执行第一个表达式
  6. // exp2在每次循环开始前求值,看exp2是否为true,如果为true执行循环体,否则for循环结束
  7. // exp3做求值操作(增量或减量操作)
  8. // true时执行顺序:exp1>-exp2>-代码段>-exp3>-exp2>-代码段>-exp3...
  9. for($i=1;$i<=10;$i++){
  10. echo $i."<br>";
  11. }
  12. // 初始值;条件;步长
  13. for ($i=1,$j=10; $i < $j ; $i++,$j--) {
  14. echo $i,"----",$j,"<br>";
  15. }
  16. /*
  17. 1----10
  18. 2----9
  19. 3----8
  20. 4----7
  21. 5----6
  22. */
  23. ?>

while循环语句

  1. <?php
  2. while(exp){
  3. // 循环体;
  4. }
  5. $i = 1;
  6. while ( $i<= 10) {
  7. echo $i."<br>";
  8. $i++;
  9. }
  10. $cities = ['安徽','上海',"武汉","北京","南京","合肥"];
  11. echo current($cities);
  12. next($cities);
  13. echo current($cities);
  14. next($cities);
  15. echo current($cities);
  16. next($cities);
  17. echo current($cities);
  18. reset($cities);
  19. echo current($cities);
  20. // current() 返回数组当前指针指向的值,到末端返回false
  21. while ($i=current($cities)) {
  22. echo $i."<br>";
  23. next($cities); // 往下移动指针
  24. }
  25. var_export(current($cities)); // false 已移动到末尾
  26. // 将数组的指针回位
  27. reset($cities);
  28. ?>

do…while循环语句

  1. <?php
  2. do{
  3. 循环体;
  4. }while(exp);
  5. // 无条件的执行一次循环体,接着再来判断条件是否为true,为true的话继续执行循环体
  6. $i = 1;
  7. do{
  8. echo $i."<br>";
  9. }while ($i<=10)
  10. ?>
  11. $cities = ['安徽','上海',"武汉","北京","南京","合肥"];
  12. $i = 0;
  13. do{
  14. echo $cities[$i];
  15. $i++;
  16. }while($i<count($cities));

goto (跳转指定)
跳转到指定位置
continue(结束本次)
代表跳过当次循环执行下次循环,可应用于for语句、while语句和do…while语句
break (终止循环)
可以通过break结束for语句、while语句和do…while语句死循环。

  1. <?php
  2. // continue 只是结束本次的循环程序,继续下一次
  3. // 只输出十以内的偶数
  4. for ($i=1; $i < 10; $i++) {
  5. if($i%2!=0){
  6. continue;
  7. }
  8. echo $i."<br>";
  9. }
  10. // 看下面这个条件显然是一个死循环
  11. $i = 0;
  12. while (true) {
  13. // 当$i变量的值大于4的时候,我们就终止循环
  14. if($i>4){
  15. break;
  16. }
  17. echo $i."<br>";
  18. $i++;
  19. }
  20. ?>

模块化编程

include和require引入外部文件的区别?

User.php

  1. class User{
  2. public $name;
  3. public function __construct($name){
  4. $this->name = $name;
  5. }
  6. }
  7. $obj = new User('zhang');

Product.php (include)

  1. include __DIR__.'./User.php';
  2. echo $obj->name;
  3. // 注意:include 引入的文件,一旦出错,脚本还会继续执行
  4. echo "脚本继续运行"; // 脚本继续运行

Product.php 推荐(require)

  1. // include __DIR__.'./User.php';
  2. // 多次引入的话会报错,类不能重复定义
  3. require __DIR__.'./User.php';
  4. echo $obj->name;
  5. // 注意:require 引入的文件,一旦出错,就会终止脚本运行
  6. echo "脚本继续运行"; // 不会被输出

include_once和require_once的主要区别就是,当重复引入一段代码时,他们只会引入一次,从而避免变量函数多次声明。

Product.php (include_once、require_once)

  1. // 这里虽然多次引入,但不会报错,他们会判断是否重复引入
  2. include_once __DIR__.'./User.php';
  3. require_once __DIR__.'./User.php';
  4. echo $obj->name;

实际练习:

config.php 数据库链接配置文件

  1. <?php
  2. return [
  3. 'type'=>'mysql',
  4. 'host'=>'localhost',
  5. 'dbname'=>'sys',
  6. 'username'=>'root',
  7. 'password'=>'root'
  8. ]
  9. ?>

connect.php

  1. $config = require './config.php';
  2. echo "<pre>";
  3. print_r($config);
  4. // 将键名当作变量名,值作为变量的值。 对每个键/值对都会在当前的符号表中建立变量
  5. extract($config);
  6. // pdo
  7. $pdo = new PDO("$type:host=$host;dbname=$dbname;",$username,$password);
  8. echo $pdo?"数据库连接成功":"连接失败,请检查配置项……";

今日相关函数

  • mt_rand() 生成随机数的函数
  • date() 函数用于格式化时间
  • next() 将数组内部指针指向下一个单元
  • current() 返回数组中的当前指针指向值
  • reset() 将数组内部指针倒回到第一个单元
  • extract(array) 将变量从数组中导入到当前的符号表中

函数演示:

  1. <?php
  2. // mt_rand ( int $min , int $max ) : int
  3. echo mt_rand(1,100);
  4. // date ( string $format , int $timestamp = ? ) : string
  5. $today = date("Y-m-d H:i:s");
  6. echo $today; // 2021-04-28 10:36:28
  7. //----------------------------------------
  8. // next()一般和current()配套使用
  9. $cities = ['安徽','上海',"武汉","北京","南京","合肥"];
  10. echo current($cities); // 安徽
  11. next($cities);
  12. echo current($cities); // 上海
  13. next($cities);
  14. echo current($cities); // 武汉
  15. next($cities);
  16. // 归位
  17. reset($cities);
  18. echo current($cities); // 安徽
  19. //----------------------------------------
  20. // extract ( array &$array , int $flags = EXTR_OVERWRITE , string $prefix = "" ) : int
  21. // 函数会将键名当作变量名,值作为变量的值。 对每个键/值对都会在当前的符号表中建立变量
  22. $arr = ['name'=>'zhang','gender'=>"男",'age'=>18];
  23. print_r($arr);
  24. extract($arr);
  25. echo "姓名:{$name} 性别:{$gender} 年龄:{$age}";
  26. // 姓名:zhang 性别:男 年龄:18
  27. ?>

今日作业

  1. 使用定界符heredoc输出九格宫表格,要求颜色各异,每个小格子宽高50px?
  1. <?php
  2. $item = "";
  3. $tr="";
  4. for ($i=1; $i <= 3; $i++):
  5. $td="";
  6. for ($j=1; $j <= 3; $j++):
  7. $r = mt_rand(0,255);
  8. $g = mt_rand(0,255);
  9. $b = mt_rand(0,255);
  10. $td .= <<< TD
  11. <td style="background-color:rgb({$r},{$g},{$g})"></td>
  12. TD;
  13. endfor;
  14. $tr .= <<< TR
  15. <tr>
  16. {$td}
  17. </tr>
  18. TR;
  19. endfor;
  20. echo <<< TABLE
  21. <table border="1" cellspacing="0" width="150" height="150">
  22. {$tr}
  23. </table>
  24. TABLE;
  25. ?>

  1. 用php实现具有简单功能的计算器?
  1. <?php
  2. if(!empty($_POST)){
  3. $a = $_POST["a"];
  4. $b = $_POST["b"];
  5. $operator = $_POST["operator"];
  6. $result = "";
  7. if ($operator == '+'):
  8. $result = $a + $b;
  9. elseif ($operator == '-'):
  10. $result = $a - $b;
  11. elseif ($operator == '*'):
  12. $result = $a * $b;
  13. elseif ($operator == '/'):
  14. @$result = $a / $b;
  15. endif;
  16. $info = ($operator=="/"&&$b==0)?"除数不能为0":"计算结果:{$a}{$operator}{$b}=$result";
  17. }else{
  18. $a = "";
  19. $b = "";
  20. $operator = "";
  21. $result = "";
  22. $info = "请输入要计算的数字";
  23. }
  24. ?>
  25. <!DOCTYPE html>
  26. <html lang="en">
  27. <head>
  28. <meta charset="UTF-8">
  29. <title>计算器</title>
  30. <style>
  31. .content{
  32. width: 800px;
  33. margin: 20px auto;
  34. border: 1px solid black;
  35. padding: 30px;
  36. text-align: center;
  37. background-color: aliceblue;
  38. }
  39. .content input{
  40. height: 25px;
  41. padding: 10px;
  42. font-size: 16px;
  43. }
  44. .content input[type="submit"]{
  45. height: 49px;
  46. width: 49px;
  47. }
  48. .content select{
  49. height: 49px;
  50. width: 49px;
  51. font-size: 18px;
  52. }
  53. </style>
  54. </head>
  55. <body>
  56. <div class="content">
  57. <h1>简单的计算器</h1>
  58. <form action="calculator.php" method="POST">
  59. <input type="number" name="a" value="<?= $a; ?>" required/>
  60. <select name="operator">
  61. <option value="+" <?= $operator== "+"?"selected":"" ?> >+</option>
  62. <option value="-" <?= $operator== "-"?"selected":"" ?> >-</option>
  63. <option value="*" <?= $operator == "*"?"selected":"" ?> >*</option>
  64. <option value="/" <?= $operator == "/"?"selected":"" ?> >/</option>
  65. </select>
  66. <input type="number" name="b" value="<?php echo $b; ?>" required/>
  67. <input type="submit" value="="/>
  68. <input name="result" type="text" value="<?php echo $result; ?>"/>
  69. <p><?= $info ?></p>
  70. </form>
  71. </div>
  72. </body>
  73. </html>



结束!!!

附:博客链接
【php基础入门】PHP环境搭建与初识php代码书写及演示PHP和JS中遍历数组的区别等知识点学习笔记
【php基础入门】细说php的变量以及常量的知识点详解

Correcting teacher:灭绝师太灭绝师太

Correction status:qualified

Teacher's comments:
Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments
Author's latest blog post