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

字符串的插值

  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的变量以及常量的知识点详解

更多相关文章

  1. PHP第二课:变量,常量,魔术常量
  2. PHP之变量与常量
  3. 0426-变量与常量
  4. 一些Java开发人员在编程中常见的雷!
  5. PHP变量的知识点
  6. Unity小游戏之闯关小游戏
  7. Python技术分享:深入理解ThreadLocal变量的功能和使用
  8. 10行C++代码实现高性能HTTP服务
  9. 【php基础入门】细说php的变量以及常量的知识点详解

随机推荐

  1. mysql cluster的常见问题
  2. MYSQL存储过程,函数,光标
  3. mysql转存sql脚本的时候怎么取消外键
  4. ssh项目 com.mchange.v2.c3p0.impl.NewPr
  5. PostgreSQL 高级特性入门篇
  6. [MySQL]1045 - Access denied for user '
  7. Spring 中jdbcTemplate 实现执行多条sql
  8. [求助][CAB][安装包][CF2.0][SQL][setup]
  9. Mysql数据库学习笔记(一)
  10. SQL Server 2012失败:导入平面文件时,日期