返回首页

PHP 基础语法完全指南

一份适合入门与速查的 PHP 基础语法手册,涵盖从环境搭建到面向对象的核心知识点。

1 约 7 分钟 · 10318 字 后端

PHP 基础语法完全指南

一份适合入门与速查的 PHP 基础语法手册,涵盖从环境搭建到面向对象的核心知识点。


目录


1. PHP 简介

PHP(Hypertext Preprocessor)是一种开源的、运行在服务器端的脚本语言,广泛用于 Web 开发。

  • 文件扩展名:.php
  • 默认运行环境:Apache / Nginx + PHP-FPM
  • 当前主流版本:PHP 8.x(支持 JIT、命名参数、枚举等新特性)

查看版本:

php -v

2. 基本语法

PHP 代码必须包含在 <?php ... ?> 标签中:

<?php
echo "Hello, World!";

纯 PHP 文件建议不要写结尾的 ?>,以避免输出多余空白字符。

注释

<?php
// 单行注释
# 单行注释(Shell 风格)
/*
   多行
   注释
*/
/**
 * 文档注释(PHPDoc)
 * @param int $x
 * @return int
 */

语句结束符

每条语句必须以 ; 结尾:

<?php
$name = "Tom";
echo $name;

3. 变量与常量

变量

  • $ 开头
  • 区分大小写
  • 不需要声明类型(动态弱类型)
<?php
$name  = "Alice";
$age   = 18;
$price = 9.99;
$ok    = true;

常量

<?php
define('SITE_NAME', '示例网站'); // 运行时定义
const VERSION = '1.0.0';         // 编译时定义(类中也可用)

echo SITE_NAME;
echo VERSION;

变量作用域

<?php
$x = 10; // 全局变量

function demo() {
    global $x;   // 引入全局变量
    echo $x;
}

function counter() {
    static $n = 0; // 静态变量,函数调用间保留
    $n++;
    echo $n;
}

4. 数据类型

PHP 是动态弱类型语言,主要类型如下:

类型 说明 示例
int 整数 42
float 浮点数 3.14
string 字符串 "hello"
bool 布尔值 true / false
array 数组 [1,2,3]
object 对象 new Foo()
null 空值 null
resource 资源 文件句柄等

类型判断与转换

<?php
$x = "123";

var_dump($x);          // string(3) "123"
$y = (int) $x;          // 强制转换
settype($x, "integer"); // 直接修改类型

is_int($y);    // true
is_string($x); // false
gettype($y);   // "integer"

字符串定义

<?php
$a = 'Hello $name';      // 单引号:不解析变量
$b = "Hello $name";      // 双引号:解析变量
$c = <<<EOT
Heredoc 字符串 $name
支持变量解析
EOT;

$d = <<<'EOT'
Nowdoc 字符串 $name
不支持变量解析
EOT;

5. 运算符

算术运算符

+  -  *  /  %  **

赋值运算符

=  +=  -=  *=  /=  .=  %=

比较运算符

运算符 含义
== 值相等(类型自动转换)
=== 值且类型相等
!= / <> 不等
!== 严格不等
<=> 太空船运算符(返回 -1/0/1)

逻辑运算符

&&  ||  !   // 或 and / or / not

字符串运算符

$s = "Hello" . " " . "World"; // 拼接
$s .= "!";                    // 拼接赋值

三元 / Null 合并

<?php
$a = $x ?: 'default';          // 短三元
$b = $x ?? 'default';          // null 合并(推荐)
$c = $x ??= 'default';         // null 合并赋值(PHP 7.4+)

6. 流程控制

if / else

<?php
if ($score >= 90) {
    echo "优秀";
} elseif ($score >= 60) {
    echo "及格";
} else {
    echo "不及格";
}

switch

<?php
switch ($day) {
    case 1:
    case 2:
        echo "工作日";
        break;
    case 6:
    case 7:
        echo "周末";
        break;
    default:
        echo "未知";
}

match(PHP 8+)

<?php
$result = match($status) {
    1, 2    => '进行中',
    3       => '已完成',
    default => '未知',
};

循环

<?php
// for
for ($i = 0; $i < 10; $i++) { echo $i; }

// while
while ($n > 0) { $n--; }

// do...while
do { ... } while ($cond);

// foreach
foreach ($arr as $value) { ... }
foreach ($arr as $key => $value) { ... }

break / continue

<?php
foreach ($list as $v) {
    if ($v < 0) continue; // 跳过本次
    if ($v > 100) break;  // 终止循环
}

7. 函数

基本定义

<?php
function add($a, $b) {
    return $a + $b;
}

echo add(1, 2); // 3

默认参数 / 类型声明 / 返回值类型

<?php
function greet(string $name = "Guest"): string {
    return "Hello, {$name}";
}

可变参数

<?php
function sum(int ...$nums): int {
    return array_sum($nums);
}
sum(1, 2, 3, 4); // 10

命名参数(PHP 8+)

<?php
function createUser(string $name, int $age = 18, bool $admin = false) {}

createUser(name: 'Tom', admin: true);

匿名函数 / 箭头函数

<?php
$square = function ($x) { return $x * $x; };

$double = fn($x) => $x * 2; // 箭头函数(PHP 7.4+)

8. 数组

索引数组与关联数组

<?php
$fruits = ['apple', 'banana', 'cherry'];          // 索引数组
$user   = ['name' => 'Tom', 'age' => 18];         // 关联数组
$matrix = [[1, 2], [3, 4]];                       // 多维数组

echo $fruits[0];
echo $user['name'];
echo $matrix[1][0];

常用数组操作

<?php
count($arr);                  // 数组长度
in_array('apple', $fruits);   // 是否存在某值
array_keys($user);            // 获取所有键
array_values($user);          // 获取所有值
array_merge($a, $b);          // 合并
array_push($arr, $v);         // 入栈
array_pop($arr);              // 出栈
array_map('strtoupper', $arr);
array_filter($arr, fn($v) => $v > 0);
sort($arr); rsort($arr); ksort($arr); asort($arr);

数组解构

<?php
[$a, $b, $c] = [1, 2, 3];
['name' => $n, 'age' => $age] = $user;

9. 字符串处理

<?php
strlen($s);                  // 长度
mb_strlen($s, 'UTF-8');      // 多字节长度(中文常用)
strtolower($s); strtoupper($s);
trim($s); ltrim($s); rtrim($s);
str_replace('a', 'b', $s);
str_contains($s, 'foo');     // PHP 8+
str_starts_with($s, 'pre');  // PHP 8+
str_ends_with($s, 'end');    // PHP 8+
explode(',', $s);            // 字符串转数组
implode('-', $arr);          // 数组转字符串
substr($s, 0, 5);
sprintf("姓名:%s,年龄:%d", $name, $age);

10. 表单与超全局变量

PHP 提供了一系列超全局变量(superglobals),在任何作用域可访问:

变量 用途
$_GET GET 请求参数
$_POST POST 请求参数
$_REQUEST GET + POST + COOKIE
$_SESSION 会话数据
$_COOKIE Cookie 数据
$_FILES 上传文件
$_SERVER 服务器与请求信息
$_ENV 环境变量
$GLOBALS 所有全局变量

示例:

<?php
// form.html: <form method="post" action="submit.php">
$name = $_POST['name'] ?? '';
$ip   = $_SERVER['REMOTE_ADDR'];

session_start();
$_SESSION['user'] = $name;

setcookie('lang', 'zh-CN', time() + 3600);

11. 面向对象编程

类与对象

<?php
class User
{
    public string $name;
    protected int $age;
    private string $password;

    public function __construct(string $name, int $age) {
        $this->name = $name;
        $this->age  = $age;
    }

    public function sayHi(): string {
        return "Hi, I'm {$this->name}";
    }
}

$u = new User('Tom', 18);
echo $u->sayHi();

继承与多态

<?php
class Admin extends User
{
    public function sayHi(): string {
        return parent::sayHi() . ' (admin)';
    }
}

访问修饰符

修饰符 类内 子类 外部
public
protected
private

静态成员

<?php
class Counter {
    public static int $count = 0;
    public static function inc(): void {
        self::$count++;
    }
}

Counter::inc();
echo Counter::$count;

抽象类与接口

<?php
abstract class Animal {
    abstract public function speak(): string;
}

interface Runnable {
    public function run(): void;
}

class Dog extends Animal implements Runnable {
    public function speak(): string { return "Woof"; }
    public function run(): void { echo "running"; }
}

Trait(代码复用)

<?php
trait Loggable {
    public function log(string $msg): void {
        echo "[LOG] $msg\n";
    }
}

class Service {
    use Loggable;
}

构造函数提升(PHP 8+)

<?php
class Point {
    public function __construct(
        public float $x = 0.0,
        public float $y = 0.0,
    ) {}
}

枚举(PHP 8.1+)

<?php
enum Status: string {
    case Active   = 'A';
    case Disabled = 'D';
}

$s = Status::Active;
echo $s->value; // "A"

12. 命名空间与自动加载

命名空间

<?php
namespace App\Service;

class UserService {}

使用:

<?php
use App\Service\UserService;
use App\Service\UserService as US;

$svc = new UserService();

Composer 自动加载

composer.json 示例:

{
    "autoload": {
        "psr-4": {
            "App\\": "src/"
        }
    }
}

执行后即可自动加载:

composer dump-autoload
<?php
require __DIR__ . '/vendor/autoload.php';

13. 异常处理

<?php
try {
    if ($x < 0) {
        throw new InvalidArgumentException("x 必须 ≥ 0");
    }
} catch (InvalidArgumentException $e) {
    echo "参数错误: " . $e->getMessage();
} catch (Throwable $e) {
    echo "未知错误: " . $e->getMessage();
} finally {
    echo "总会执行";
}

自定义异常:

<?php
class BusinessException extends \RuntimeException {}

14. 文件与 I/O

<?php
// 读
$content = file_get_contents('data.txt');
$lines   = file('data.txt');

// 写
file_put_contents('data.txt', "hello\n", FILE_APPEND);

// 句柄方式
$fp = fopen('data.txt', 'r');
while (!feof($fp)) {
    echo fgets($fp);
}
fclose($fp);

// 判断
file_exists('a.txt');
is_file('a.txt');
is_dir('logs');

// JSON
$json = json_encode(['a' => 1], JSON_UNESCAPED_UNICODE);
$arr  = json_decode($json, true);

15. 常用内置函数速查

分类 常用函数
字符串 strlen strpos str_replace explode implode sprintf trim
数组 count array_map array_filter array_merge in_array array_keys
数学 abs round ceil floor min max rand mt_rand
时间 time date strtotime mktime microtime
类型 is_int is_array is_null empty isset gettype
调试 var_dump print_r error_log debug_backtrace
编码 json_encode json_decode base64_encode urlencode md5 sha1

16. 常见最佳实践

  1. 始终开启严格类型:在文件顶部使用 declare(strict_types=1);
  2. 优先使用 ===!==,避免类型隐式转换带来的坑
  3. 使用 ?? 而不是 isset(...) ? ... : ...
  4. 遵循 PSR-12 编码规范PSR-4 自动加载规范
  5. 使用 Composer 管理依赖,不再手动 require 一堆文件
  6. 永远不要信任用户输入:过滤 $_GET / $_POST,使用 PDO 预处理防止 SQL 注入
  7. 输出到 HTML 时使用 htmlspecialchars() 防止 XSS
  8. 生产环境关闭 display_errors,只记录日志
  9. 使用现代框架(Laravel、Symfony 等)而不是裸写 PHP
  10. 保持 PHP 版本更新,至少使用 PHP 8.1+

严格类型示例

<?php
declare(strict_types=1);

function add(int $a, int $b): int {
    return $a + $b;
}

add(1, '2'); // TypeError

学完以上内容,你已经掌握了 PHP 的基础语法。下一步建议:

  • 学习 PDO / MySQL 操作数据库
  • 学习 Composer 与包管理
  • 学习 LaravelSymfony 等主流框架
  • 阅读官方文档:https://www.php.net/manual/zh/