对于 PHP 的课堂, 和 Swift 课堂一样, 也是总共 10 个课时, 讲完 PHP 的基本语法, 中间会参杂一些比较高级的语法, 有能力者可以学习

PHP 课堂默认你有一定的计算机语言基础, 否则不建议学习. 可以学习 Swift 课堂先

第一课其实本来应该写如何在 Linux、Windows 或者 macOS 等平台上配置 PHP 开发环境, 但是之前已经有写过在 Linux 里配置 PHP 的教程, 而且本人对于 Windows 平台没什么兴趣, macOS纯属办公, 所以就不打算写其他教程了, 如果各位有需要, 请自行 Google

一、PHP 标识符

因为 PHP 可以嵌入在 JavaScript、HTML 等语言中, 所以标识符就变得非常重要. 因为要让编译器知道, 这段代码不是 HTML 而是 PHP

1. PHP 有默认的标识符

<?php

    statement

    ......

?>

这种是最常用的标识符, 也推荐大家使用这一种 PHP 标识符

2. 短风格

<?

    statement

    ......

?>

并不推荐这一种标识符, 并且通常情况下这种表示方法是被关闭的, 因为可能会和其它表示方法相冲突

3. Script 风格

<script language="php">

    statement

    ......

</script>

这种风格十分类似于 HTML 页面中的 JavaScript 的表示方法

4. ASP 风格

<%

    statement

    ......

%>

PHP 为了照顾 ASP 的使用者, 提供了这一种表示方法

同样, 在正常情况下并不推荐使用这一种表示方法

二、编码规范

1. 结束标识符

和 Swift 不同的是, PHP每一句结束都需要 ; 作为结尾, 告诉编译器结束这一句

<?php

    echo "Hello, PHP!";

?>

2. 指令分隔符

在一段 PHP 代码结束标记中, 隐含了一个分号, 所以 PHP 代码段中最后一行可以不需要分号

<?php

    echo "Hello, PHP!"?>

3. 注释

PHP 提供了 3 种注释风格

  • C 风格
/* statement */
  • C++ 风格
//statement
  • Shell 风格
#statement

Shell 风格 和 C 风格是本人用的最多的注释方式

三、常量

PHP 通过 define() 命令来定义一个常量

<?php

    define("常量名", 常量值);

?>

其中常量值可以是 String 类型

在 PHP 7 中, 增加了可以通过 define() 命令来定义一个常量数组

当然, PHP 中会有一些内置的常量

  • _FILE_ : 获得文件完整的路径和文件名
  • _LINE_ : 获得 PHP 程序的行数
  • PHP_VERSION : 获得 PHP 的版本
  • PHP_OS : 获得 PHP 解析器的操作系统名称
  • TRUE : 真
  • FALSE : 假
  • E_ERROR : 指到最近的错误处
  • E_WARNING : 指到最近的警告处
  • E_PARSE : 指到解析语法有潜在问题处
  • E_NOTICE : 指到发生不寻常但不一定是错误处 (例如 : 存取一个不存在的变量)
  • _DIR_ : 获得文件所在的目录
  • _FUNCTION_ : 函数的名称
  • _CLASS_ : 类的名称

四、变量

1. 变量的声明

不像 C++ 或者 Java, PHP 中的变量声明非常简单, 一般在变量名称前面加一个 $ 即可, 可以以大小写 "a-z"、"0-9"、"_"

但是变量不可以以 数字 开头, 并且其中也不允许存在非法字符

这种命名方式最大的优势就在于可以命名已经保留的关键字, 例如 arrayiffor 等等

<?php

    $array = array(1, 2, 3);

    print_r($array);

    /*

        结果 :

            Array

            (

                [0] => 1

                [1] => 2

                [2] => 3

            )

    */

    $if = 6;

    echo $if;    #结果 : 6

?>

2. 变量的引用赋值

在变量前面增加 & 符号就代表引用赋值的时候, 两个变量会指向内存中的一个存储空间

<?php

    $a = 1;

    $b = &$a;

    $b = 2;

    echo $a;    #结果 : 2

?>

3. 可变变量

首先看一段代码

<?php

    $a = "admin";

    $$a = "guest";

    echo $admin;

    echo "<br />";

    echo $a;

    /*

        结果 :

            guest

            admin

    */
?>

首先声明了名字为 $a 的变量, 并且赋值 "admin", 然后再一次给 $a 变量赋值 "guest"

仔细解读这一段代码其实和变量的传递有点类似 : 首先创建了一个 $a 的变量, 之后再次 $$a 就相当于 $admin

4. 超全局变量

超全局变量的特点可以从名字去解读, 就是任何位置都可以访问到这个变量

PHP 内置的超全局变量有 :

  • $GLOBALS : 包含全局变量的数组
  • $_GET : 包含所有通过 GET 方法传递变量的数组
  • $_POST : 包含所有通过 POST 方法传递变量的数组
  • $_FILES : 包含文件上传变量的数组
  • $_COOKIE : 包含 Cookie 变量的数组
  • $_SERVER : 包含服务器变量环境的数组
  • $_ENV : 包含环境变量的数组
  • $_REQUEST : 包含用户所有输入内容的数组 (包括了 $_GET$_POST 和 $_COOKIE)
  • $_SESSION : 包含了会话变量的数组

5. 全局变量

全局变量可以在函数之外任意位置都可以访问

<?php

    $a = 20;

    function showA() {

        echo $a;

    }

    showA();    #报错

    echo "<br />"

    echo $a;

?>

如果想要在函数内访问函数外的变量, 可以通过 global 关键字或者 $GLOBALS 数组

<?php

    $a = 20;

    function showA() {

        global $a;

        echo $a;

    }

    showA();

    echo "<br />";

    echo $a;

    /*

        结果 :

            20

            20

    */
?>
<?php

    $a = 20;

    function showA() {

        $a = $GLOBALS['a'];

        echo $a;

    }

    showA();

    echo "<br />";

    echo $a;

    /*

        结果 :

            20

            20

    */
?>

6. 静态变量

静态变量只有函数内可以访问, 函数外便失效

7. 变量的销毁

每一个变量都有一个专门的内存分配, 一个好的程序员应该要为自己的程序进行内存的优化, 即不用的变量及时销毁, 即使 PHP 有自动回收垃圾的机制

PHP 中可以通过 unset() 函数来销毁垃圾变量

<?php

    $a = 20;

    echo $a;

    unset($a);

    echo "<br />";

    $b = 30;

    echo $b;

    /*

        结果 :

            20

            30
    
    */
?>

五、数据类型

1. 整数型 : Int

2. 浮点型 : FloatDouble

3. 布尔型 : Bool

  • 整数型 : 为 0 时, 布尔属性为 False; 非 0 时, 布尔属性为 True
  • 浮点型 : 为 0.0 时, 布尔属性为 False; 非 0 时, 布尔属性为 True
  • 字符串型 : 为 "" 或者 "0" 时, 布尔属性为 False; 否则, 布尔属性为 True
  • 数组型 : 不含任何元素的数组, 布尔属性为 False; 否则, 布尔属性为 True
  • NULL 型 : 布尔属性永远为 False

4. 字符串型 : String

5. 数组型 : Array

6. 对象型 : Object

7. NULL 型 : NULL

8. 接口类 : Interfaces

9. 资源 (Resource) 类型

因为 PHP 语言为动态类型语言, 所以上述不再深入

六、数据类型转换

1. 自动数据类型转换

可以直接在变量前表明数据类型

<?php

    $a = 2.2;

    $a = (int)$a;

    echo $a;    #结果 : 2

?>

2. 强制数据类型转换

在 PHP 中, 可以使用 settype() 函数来进行强制类型转换

Bool settype(var, string type)

注意 : 其中不可以包含资源类型数据

<?php

    $a = 2.2;

    settype($a, "int");

    echo $a;    #结果 : 2

    $a = 2.2;

    echo settype($a, "int");    #结果 : 1

?>