本笔记基于PHP 教程 | 菜鸟教程 (runoob.com)以及PHP 教程 - php完全自学手册 - php中文网手册编写

一、基本使用

(一)基本原理与语法

1、基本原理

PHP脚本在服务器上执行,然后将纯HTML结果发挥浏览器

2、基本语法

  • 位置:PHP脚本可以放在文档中的任意位置
  • 语法1
    • <?php开头
    • ?>结尾
  • 举例1:PHP文件.php
<?php
    // PHP代码
?>
  • 举例2:PHP+HTML文件.php
<!DOCTYPE html>
<html>
<body>

<h1>My first PHP page</h1>

<?php
echo "Hello World!";
?>

</body>
</html>
  • 举例2的运行结果
    PHP:入门(一)_01.png

  • 语法2:PHP中的每个代码都必须以分号结尾,分号在PHP中是一种分隔符,用于将指令集区分开

(二)注释

<?php
    // 这是 PHP 单行注释

    /*
        这是 
        PHP 多行
        注释
    */
?>

(三)变量

PHP是一个弱类型语言,不必声明变量的数据类型

1、变量的定义规则

  1. 变量以$符号开始,后面跟着变量的名称,比如:$abc就定义了一个名为abc的变量
  2. 命名规则:
    1. 变量只可以字母或者下划线开头
    2. 变量名中只可包含数字(0~9)、字母(a~z,A~Z)、下划线( _ )
    3. 变量名不可包含空格
  3. 变量名区分大小写!!!
  4. 变量名可以重复,新定义的变量值会覆盖原变量的值
  5. PHP中没有声明变量的命令,变量在第一次赋值时被创建
<?php
    $text = 'ricardo';
    echo $text;     // ricardo

    $unkown ;
    echo $unkown;   // 由于没有给变量unkown赋值,所以什么也没有输出
?>

2、变量的作用域

​ PHP中的作用域的分类:

  1. local
  2. global
  3. static
  4. parameter

(1)局部和全局作用域

  • 全局作用域:
    • 在所有函数外定义的变量拥有全局作用域。
    • 除了函数外,全局变量可以在脚本的任意位置被访问。
    • 若局部作用域想要访问全局变量则需要使用global关键字。
  • 局部作用域:
    • 在函数内定义的变量拥有局部作用域。
    • 该局部变量只能在该函数内被访问。
  • 举例:
<?php 
    $x=5; // 全局变量 

    function myTest() { 
        $y=10; // 局部变量 
        echo "<p>测试函数内变量:<p>"; 
        echo "变量 x 为: $x"; 
        echo "<br>"; 
        echo "变量 y 为: $y"; 
    }  

    myTest(); 

    echo "<p>测试函数外变量:<p>"; 
    echo "变量 x 为: $x"; 
    echo "<br>"; 
    echo "变量 y 为: $y"; 
?>
  • 结果:
    PHP:入门(一)_02.png
  • 解释:
    1. 变量$x为全局变量:
      1. 第8行:处于函数内,即局部作用域中,因为函数内没有用global关键字声明全局变量$x,所以无法输出$x的值
      2. 第16行:处于全局作用域中,可以访问全局变量$x,输出值为5
    2. 变量$y为局部变量:
      1. 第10行:处于函数内,即局部作用域中,可以直接访问该局部作用域中的局部变量,即输出值10
      2. 第18行:处于全局作用域中,无法访问局部变量$y,无法输出$y的值

(2)global关键字

  • 作用:用于函数内访问全局变量。
  • 使用方法:在函数内调用全局变量是,需要在函数中的变量(全局变量)前加上global关键字
  • 举例:
<?php
    $x=5;
    $y=10;

    function myTest() {
        global $x,$y;
        $y=$x+$y;
    }

    myTest();
    echo $y; 
?>
  • 结果:
    PHP:入门(一)_03.png

  • 原理:PHP 将所有全局变量存储在一个名为 $GLOBALS[index] 的数组中。 index 保存变量的名称。这个数组可以在函数内部访问,也可以直接用来更新全局变量。

    注:上述代码在PHP5版本下输出值是15;但是PHP中文网在线实例环境是PHP7版本的,所以输出值应为10。因为在最新的php7版本中,PHPglobal变量处理机制进行了修改,此版本下global关键字只能引用简单变量。详情区别介绍可查看此文:关于PHP5和PHP7版本下global变量机制有哪些变化?(代码实测)

  • 改写案例:

<?php
    $x=5;
    $y=10;

    function myTest() {
        $GLOBALS['y']=$GLOBALS['x']+$GLOBALS['y'];
    } 

    myTest();
    echo $y;
?>
  • 结果:
    PHP:入门(一)_04.png

(3)static作用域

  • 作用:当一个函数执行完成时,其中的所有变量都会被删除,但是如果希望某个局部变量不被删除可以在下一次函数调用时继续沿用该变量的值,则可以使用static关键字
  • 注意:该变量仍然是函数的局部变量
  • 举例:
<?php

    function myTest() {
        static $x=0;
        echo $x;
        $x++;
    }

    myTest();
    myTest();
    myTest();

?>
  • 结果:
    PHP:入门(一)_05.png

(4)参数作用域

  • 参数:通过调用函数代码将值传递给函数的局部变量。参数是在参数列表中声明的,作为函数声明的一部分
  • PS:详细的作用会在函数部分详解
  • 举例:
<?php

    function myTest($x)
    {
        echo $x;
    }

    myTest(5);

?>
  • 结果:
    PHP:入门(一)_06.png

(四)常量

  • 定义:常量是一个简单值的标识符(名字)。常量值被定义后,在脚本的其他任何地方都不能被改变。
  • 使用:
    1. 一个常量由英文字母下划线、和数字组成
    2. 数字不能作为首字母出现
    3. 常量名不需要加 $ 修饰符
  • 注意:常量在定义后,默认是全局变量,可以在整个运行的脚本的任何地方使用(包括函数内)。
  • 设置PHP常量:
    • 设置常量,使用 define() 函数,函数语法如下:
      bool define ( string $name , mixed $value [, bool $case_insensitive = false ] )
    • 参数1(name):必选参数,常量名称,即标志符。
    • 参数2(value):必选参数,常量的值。
    • 参数3(case_insensitive) :可选参数,如果设置为 TRUE,该常量则大小写不敏感。默认是大小写敏感的。
  • 举例1:创建一个 区分大小写的常量, 常量值为 "欢迎访问 php.cn"
<?php
    // 区分大小写的常量名
    define("GREETING", "欢迎访问 php.cn");
    echo GREETING; // 输出 "欢迎访问 php.cn"
    echo '<br>';
    echo greeting; // 输出 "greeting"
?>
  • 举例2:创建一个 不区分大小写的常量, 常量值为 "欢迎访问 php.cn"
<?php
    // 不区分大小写的常量名
    define("GREETING", "欢迎访问 php.cn", true);
    echo greeting;  // 输出 "欢迎访问 php.cn"
?>

(五)输出(echoprint

  • 共同点:
    • 都是输出语句,用于将数据以HTML的形式输出到页面中
    • 都是语言结构,可以使用括号,也可以不使用括号
  • 不同点:
    • echo:可以输出一个或多个字符串,没有返回值
    • 使用方法:echo 输出内容; 或者 echo(输出内容);
    • print只允许输出一个字符串返回值总为1
    • 使用方法:print 输出内容; 或者 print(输出内容);
    • 相比而言,echoprint的输出速度更快

(六)数据类型

1、String(字符串)

将任意文本放入单引号或者双引号中,如:$string = 'content'

(1)扩展1:字符串变量

  • 作用:字符串变量用于存储并处理文本。
  • PS:当赋一个文本值给变量时,请记得给文本值加上单引号或者双引号
  • 举例:
<?php
    $txt="Hello world!";  // 创建并存储字符串变量
    echo $txt;      // 使用字符串变量
?>

(2)扩展2:字符串运算符

  • 在 PHP 中,只有一个字符串运算符,即并置运算符(.)
  • 作用:用于拼接字符串
  • 举例:
<?php 
    $txt1="Hello world!"; 
    $txt2="What a nice day!"; 
    echo $txt1 . " " . $txt2; // Hello world! What a nice day!
?>

(3)扩展3:字符串函数

  1. strlen() 函数:用于返回字符串的长度
    • 如:echo strlen("Hello world!"); 的输出结果为12
    • PS:常常用在循环和其他函数中,因为那时确定字符串何时结束是很重要的。(例如,在循环中,我们需要在字符串中的最后一个字符之后结束循环。)
  2. strpos() 函数:用于在字符串内查找一个字符或一段指定的文本
    • 原理:如果在字符串中找到匹配,该函数会返回第一个匹配的字符位置。如果未找到匹配,则返回 FALSE。
    • 如:echo strpos("Hello world!","world"); 的输出结果为6
    • PS:在上面的实例中,字符串 "world" 的位置是 6。之所以是 6 而不是 7 的原因是,字符串中第一个字符的位置是 0,而不是 1
  3. 其他字符串函数:详见PHP String - php完全自学手册 - php中文网手册

2、Integer(整型)

整型即为整数,是一个没有小数的数字

  • Integer(整型)必须至少有一个数字 (0-9)
  • Integer(整型)不能包含逗号或空格
  • Integer(整型)是没有小数点的
  • Integer(整型)可以是正数或负数
  • Integer(整型)可以用三种格式来指定:十进制, 十六进制( 以 0x 为前缀)或八进制(前缀为 0)

PS:var_dump() 函数返回变量的数据类型和值

<?php 
    $x = 5985;
    var_dump($x);   // int(5985)
    echo "<br>"; 

    $x = -345; // 负数 
    var_dump($x);   // int(-345)
    echo "<br>"; 

    $x = 0x8C; // 十六进制数
    var_dump($x);   // int(140)
    echo "<br>";

    $x = 047; // 八进制数
    var_dump($x);   // int(39)
?>

3、Float(浮点型)

浮点数是带小数部分的数字,或是指数形式。

<?php 
    $x = 10.365;
    var_dump($x);   // float(10.365)
    echo "<br>"; 

    $x = 2.4e3;
    var_dump($x);   // float(2400)
    echo "<br>"; 

    $x = 8E-5;
    var_dump($x);   // float(8.0E-5)
?>

4、Boolean(布尔型)

布尔型可以是 TRUE 或 FALSE,如:$boolean = true。通常用于条件判断。

5、Array(数组)

数组可以在一个变量中存储多个值。

<?php 
    $cars=array("Volvo","BMW","Toyota");
    var_dump($cars);    // array(3) { [0]=> string(5) "Volvo" [1]=> string(3) "BMW" [2]=> string(6) "Toyota" }
?>

6、Object(对象)

  • 对象数据类型也可以用于存储数据。
  • 注意:对象必须声明!!
  • 使用步骤:
    1. 使用class关键字声明类对象,类是可以包含属性和方法的结构
    2. 在类中定义数据类型
    3. 在实例化的类中使用数据类型
  • 举例:
<?php
    class Car {
        var $color; // 声明属性-color
        function Car($color="green") {    // 构造函数用于初始化Car类的对象,默认为绿色
          $this->color = $color; // 将传入颜色参数初始化给Car类的属性color
        }
        function what_color() {
          return $this->color;   // 返回车辆的颜色
        }
    }

    function print_vars($obj) { // 用于打印对象的属性,该函数接受一个对象作为参数。
       foreach (get_object_vars($obj) as $prop => $val) {    // 通过 get_object_vars 函数获取对象的属性列表,然后逐个打印属性名和属性值。
         echo "    $prop = $val
    ";
       }
    }

    $herbie = new Car("white");   // 实例化了一个名为$herbie的Car对象,颜色为"white"

    print_vars($herbie);    // 调用打印函数,查看实例对象$herbie的属性

?>
  • 注意:在 PHP 中,var 关键字用于声明类的属性。在较早版本的 PHP 中,var 被用于声明类的成员变量,即类的属性。然而,在较新版本的 PHP(5.0+)中,推荐使用 public, protected, 或 private 关键字来声明属性,而不再使用 var。因此,建议在现代的 PHP 代码中,使用 public, protected, 或 private 来代替 var 来声明类的属性。

7、NULL(空值)

  • NULL:表示变量没有值。NULL 是数据类型为 NULL 的值。

  • 常用方法:可以通过设置变量值为 NULL 来清空变量数据

(七)运算符

1、算数运算符

运算符 名称 描述 实例 结果
x + y x 和 y 的和 2 + 2 4
x - y x 和 y 的差 5 - 2 3
x * y x 和 y 的积 5 * 2 10
x / y x 和 y 的商 10 / 3 3.3333333
x % y 模(除法的余数) x 除以 y 的余数 5 % 2 10 % 8 10 % 2 1 2 0
- x 取反 x 取反 - 2 -2
a . b 并置 连接两个字符串 "Hi" . "Ha" HiHa

PHP7+ 版本新增整除运算符 intdiv(),如var_dump(intdiv(10, 3));的输出结果为int(3)

运算符 名称 描述 实例 结果
intdiv(x, y) 整除 x和y的商向下取整 intdiv(10, 3) 3

2、赋值运算符

运算符 等同于 描述
x = y x = y 左操作数被设置为右侧表达式的值
x += y x = x + y
x -= y x = x - y
x *= y x = x * y
x /= y x = x / y
x %= y x = x % y 模(除法的余数)
a .= b a = a . b 连接两个字符串

3、递增/递减运算符

也叫自增自减

运算符 名称 描述
++ x 预递增 x 加 1,然后返回 x
x ++ 后递增 返回 x,然后 x 加 1
-- x 预递减 x 减 1,然后返回 x
x -- 后递减 返回 x,然后 x 减 1

案例:

<?php
    $x=10; 
    echo ++$x; // 输出11
    echo "<br>";

    $y=10; 
    echo $y++; // 输出10
    echo "<br>";

    $z=5;
    echo --$z; // 输出4
    echo "<br>";

    $i=5;
    echo $i--; // 输出5
?>

4、比较运算符

运算符 名称 描述 实例
x == y 等于 如果 x 等于 y,则返回 true 5==8 返回 false
x === y 恒等于 如果 x 等于 y,且它们类型相同,则返回 true 5==="5" 返回 false
x != y 不等于 如果 x 不等于 y,则返回 true 5!=8 返回 true
x <> y 不等于 如果 x 不等于 y,则返回 true 5<>8 返回 true
x !== y 不恒等于 如果 x 不等于 y,或它们类型不相同,则返回 true 5!=="5" 返回 true
x > y 大于 如果 x 大于 y,则返回 true 5>8 返回 false
x < y 小于 如果 x 小于 y,则返回 true 5<8 返回 true
x >= y 大于等于 如果 x 大于或者等于 y,则返回 true 5>=8 返回 false
x <= y 小于等于 如果 x 小于或者等于 y,则返回 true 5<=8 返回 true

5、逻辑运算符

运算符 名称 描述 实例
x == y 等于 如果 x 等于 y,则返回 true 5==8 返回 false
x === y 恒等于 如果 x 等于 y,且它们类型相同,则返回 true 5==="5" 返回 false
x != y 不等于 如果 x 不等于 y,则返回 true 5!=8 返回 true
x <> y 不等于 如果 x 不等于 y,则返回 true 5<>8 返回 true
x !== y 不恒等于 如果 x 不等于 y,或它们类型不相同,则返回 true 5!=="5" 返回 true
x > y 大于 如果 x 大于 y,则返回 true 5>8 返回 false
x < y 小于 如果 x 小于 y,则返回 true 5<8 返回 true
x >= y 大于等于 如果 x 大于或者等于 y,则返回 true 5>=8 返回 false
x <= y 小于等于 如果 x 小于或者等于 y,则返回 true 5<=8 返回 true

6、数组运算符

运算符 名称 描述
x + y 集合 x 和 y 的集合
x == y 相等 如果 x 和 y 具有相同的键/值对,则返回 true
x === y 恒等 如果 x 和 y 具有相同的键/值对,且顺序相同类型相同,则返回 true
x != y 不相等 如果 x 不等于 y,则返回 true
x <> y 不相等 如果 x 不等于 y,则返回 true
x !== y 不恒等 如果 x 不等于 y,则返回 true

7、三元运算符

  • 语法格式:(expr1) ? (expr2) : (expr3)
  • 原理:对 expr1 求值为 TRUE 时的值为 expr2,在 expr1 求值为 FALSE 时的值为 expr3。
  • PS:自 PHP 5.3 起,可以省略三元运算符中间那部分。
    • 举例: expr1 ?: expr3
    • 解读:在 expr1 求值为 TRUE 时返回 expr1,否则返回 expr3。
  • 举例:
<?php
    $test = 'php中文网';
    // 普通写法
    $username = isset($test) ? $test : 'nobody';
    echo $username, PHP_EOL;    // php中文网

    // PHP 5.3+ 版本写法
    $username = $test ?: 'nobody';
    echo $username, PHP_EOL;    // php中文网
?>

(8)组合比较符(PHP7+)

PHP7+版本之后支持组合比较符,实际运用如下:

<?php
    // 整型
    echo 1 <=> 1; // 0
    echo 1 <=> 2; // -1
    echo 2 <=> 1; // 1

    // 浮点型
    echo 1.5 <=> 1.5; // 0
    echo 1.5 <=> 2.5; // -1
    echo 2.5 <=> 1.5; // 1

    // 字符串
    echo "a" <=> "a"; // 0
    echo "a" <=> "b"; // -1
    echo "b" <=> "a"; // 1
?>