# PHP

:超文本预处理器(Hypertext Preprocessor),一种脚本语言。

  • 官方文档 (opens new window)
  • 1994 年,加拿大的 Rasmus Lerdorf 为了维护个人网页而用 Perl 语言编写了一些程序,后来改进成一种新语言 PHP 。
  • 常用于 Web 程序开发。

# 语法特点

  • 脚本文件的扩展名为 .php 。
  • 每个语句的末尾以分号 ; 作为分隔符。
  • // 声明单行注释,用 /**/ 声明多行注释。
  • 支持定义函数,支持面向对象编程。
  • PHP 代码可以通过标签 <?php?> 嵌入到 HTML 文件中,但此时要将文件扩展名改为 .php 。如下:
    <!DOCTYPE html>
    <html>
    <body>
    
    <?php
    echo "Hello World!";
    ?>
    
    </body>
    </html>
    

# 解释器

  • 版本:

    • PHP 5.6 :于 2014 年发布。
    • PHP 6 :被跳过。
    • PHP 7 :于 2015 年底发布,优化了很多性能。
    • PHP 8 :于 2020 年底发布。
  • 安装 PHP 解释器:

    yum install epel-release
    yum install http://rpms.remirepo.net/enterprise/remi-release-7.rpm
    yum install php72
    

# 变量

  • 变量的命名规范与 C 语言相同,但是变量名要加上 $ 前缀。
  • 变量会在第一次赋值时被自动创建,不需要声明变量的类型,因此 PHP 是一种弱类型语言。如下:
    $x = 1;
    echo $x;
    

# 变量的作用域

  • 局部变量:在函数之内创建,只能在函数之内访问。
    • 局部变量在函数执行完成之后会被自动销毁,也可以用关键字 static 声明为静态变量,避免被销毁。
  • 全局变量:在函数之外创建,可以从脚本的任意位置访问,但是在函数之内访问时要用 global 关键字声明,或者通过超全局变量 $GLOBALS[] 访问。
    • 例:
      $x = 1;
      function fun1()
      {
          global $x;
          echo $x;
          echo $GLOBALS["x"];
      }
      

# 超全局变量

:一些关联数组,由 PHP 解释器提供,不需要声明就可以在所有 PHP 脚本中使用。

  • $GLOBALS :存储了所有全局变量。
  • $_SERVER :存储了一些服务器的信息。
    • 执行 print_r($_SERVER); 即可查看其具体内容,如下:
      $_SERVER["SERVER_ADDR"] = 127.0.0.1   // 服务器的 IP 地址
      $_SERVER["SERVER_PORT"] = 80          // 服务器的端口号
      $_SERVER["REMOTE_ADDR"] = 127.0.0.1   // 客户端的 IP 地址
      $_SERVER["REMOTE_PORT"] = 51362       // 客户端的端口号
      $_SERVER["REQUEST_METHOD"] = "GET"    // 客户端的请求方法
      $_SERVER["REQUEST_URI"] = "/index.php?id=1&page=2"   // 客户端请求的 URI(域名之后的部分)
      $_SERVER["QUERY_STRING"] = "id=1&page=2"             // 客户端请求的 query string
      $_SERVER["SCRIPT_FILENAME"] => "/php/WWW/index.php"  // 该脚本在主机上的绝对路径
      $_SERVER["SCRIPT_NAME"] = "/index.php"               // 该脚本在网站中的相对路径
      
  • $_REQUEST :存储了 HTTP 请求的表单数据。如下:
    echo $_REQUEST["username"];
    
  • $_POST :存储了 HTTP 请求的表单数据。如下:
    echo $_POST["username"];
    
  • $_GET :存储了 HTTP 请求的 query string 中的参数。如下:
    echo $_REQUEST["kw"];
    
  • $_COOKIE
  • $_SESSION
  • $_ENV :存储了 PHP 脚本的所有环境变量。
  • $_FILES :存储了 Web 客户端上传的文件。

# 数据类型

  • null :空值。
  • int
  • float
  • bool
    • :布尔型,取值为 true 或 false 。

# string

  • :字符串,用单引号 ' 或双引号 " 作为定界符。

  • <<<标识符标识符; 作为定界符时,会使字符串中的转义字符无效。如下:

    str1 = <<<EOF
        <h1>标题一</h1>
        <p>x 的值是:$x</p>
    EOF;
    
  • 如何显示一个字符串到终端?

    • 可以用关键字 echo ,如下:
      $x = 1;
      echo $x;
      echo $x, "\nhello";           // 可以通过逗号,显示多个字符串
      echo "hello{$x}world";        // 字符串的定界符为双引号时,可以嵌入变量的值
      echo 'hello' . $x . 'world';  // 多个字符串,可以用 . 拼接为一个字符串
      
    • 也可以用关键字 print ,但它同时只能显示一个字符串。
    • 可以用函数 print_r()var_dump() 按适当的排版显示变量的值,并且 var_dump() 还会显示变量的类型、长度。

# array

  • :数组。用 array() 函数定义,支持嵌套。
  • 数值数组:访问时使用数字作为下标,像 C 语言的普通数组。如下:
    $text = array("hello","world","!");
    $text[0] = "hi";
    echo count($text);  // 获取数组的长度
    sort($text);        // 升序排列
    rsort($text);       // 降序排列
    
  • 关联数组:访问时使用键名作为下标,像 Python 的字典。每个键值对用 => 连接。
    $text = array("line1" => "hello", "line2" => "world","line3"=>"!");
    $text["line1"] = "hi";
    ksort($text);       // 根据键名升序排列
    krsort($text);      // 根据键名降序排列
    

# 常量

  • :用 define() 函数定义,常量名不需要加 $ 前缀。如下:
    define("URL", "www.baidu.com");
    echo URL;
    
  • 常量的值不能修改。
  • 常量都是全局变量,而且可以在函数内直接访问,不需要用 global 关键字。

# 运算符

  • 支持 C 语言的算术运算符、赋值符号、自加和自减、比较运算符、逻辑运算符。
  • 例:判断两个变量相同
    $a == $b    // 两个变量的值相同
    $a === $b   // 两个变量的类型和值都相同(完全相同)
    
    • 0 与 "0"、0 与 "" 的值相同、类型不同。
    • "0" 与 "" 的值不同(完全不同)。
    • 0 与 ""、false、null 的值相同、类型不同。
    • false 与 "false" 、null 与 "null" 完全不同。

# 流程控制

  • 支持 C 语言的 if-else、switch、for、while、do-while 语句。

# 函数

  • 用关键字 function 定义函数:
    function fun1($x)
    {
        echo $x;
    }
    fun1("hello");
    

# 相关概念

  • 基于 PHP 运行 Web 网站时,常见的几种运行环境:

    • LAMP :Linux + Apache + MySql + PHP
    • LNMP :Linux + Nginx + MySql + PHP
    • WAMP :Windows + Apache + MySql + PHP
    • WNMP :Windows + Nginx + MySql + PHP
    • WampServer :一款 WAMP 软件。
    • phpStudy :一款兼容 WAMP 和 WNMP 的软件。
  • php-fpm

    • :PHP 的一个进程管理(FastCGI Process Manage ,FPM)工具,用于将一个提供 FastCGI 服务的 PHP 进程运行多个实例,并进行管理。
    • 单个 PHP 进程的配置文件默认位于 /etc/php.ini/etc/php.d/*.ini
    • php-fpm 的配置文件默认位于 /etc/php-fpm.conf/etc/php-fpm.d/*.conf