PHP 语法

下面对 PHP 的语法要点做一次系统化、分模块的详解,涵盖从基本结构到高级用法,帮助你全面掌握这门语言的语法特点。


1. PHP 标签与文件结构

<?php
// PHP 代码写在这里
?>
  • 标准标签<?php … ?>,推荐使用。
  • 简写标签<?= … ?> 等同于 <?php echo … ?>,默认开启;<? … ?>(short_open_tag)可能被禁用,不推荐使用。
  • HTML 与 PHP 混合:可在同一文件内使用多次 PHP 标签,以实现动态页面渲染。

2. 注释

// 单行注释
# 另一种单行注释
/*
  多行注释
*/
  • 注释不会被解释器执行,用于说明代码逻辑或屏蔽调试。

3. 变量与数据类型

$var = 123;        // 整数(int)
$pi  = 3.14;       // 浮点数(float)
$str = "Hello";    // 字符串(string)
$flag = true;      // 布尔(bool)
$arr  = [1, 2, 3]; // 数组(array)
$obj  = new stdClass(); // 对象(object)
$nil  = null;      // 空值(NULL)
  • 变量以 $ 开头,大小写敏感;
  • 动态类型:变量类型在运行时确定,可随时重新赋值为其它类型;
  • 常量:使用 define('NAME', value) 或 const NAME = value; 定义,名称通常全大写。

4. 字符串与字符串处理

// 单引号:按字面输出,不解析变量或转义(除 \\ 和 \')
$s1 = 'It\'s PHP';

// 双引号:解析变量及常见转义字符
$name = "Alice";
$s2 = "Hello, $name\n";

// HereDoc / NowDoc
$text = <<<EOD
HereDoc 支持解析变量:$name
EOD;

$text2 = <<<'EOD'
NowDoc 不解析变量:$name
EOD;
  • 常用函数:strlen()strpos()substr()str_replace()explode()implode() 等。

5. 数组

5.1 索引数组

$fruits = ['apple', 'banana', 'cherry'];
echo $fruits[1]; // banana

5.2 关联数组

$user = [
  'name' => 'Bob',
  'age'  => 30,
];
echo $user['name']; // Bob

5.3 常用操作

count($arr);          // 元素个数
array_push($arr, 4);  // 尾部添加
array_pop($arr);      // 尾部弹出
array_keys($user);    // 获取所有键
array_values($user);  // 获取所有值
foreach ($arr as $key => $val) { … }

6. 运算符

类别运算符说明
算术+ - * / % **加、减、乘、除、取余、幂运算(PHP 5.6+)
赋值= += -= *= /= .=基本赋值,包含字符串拼接赋值 .=
比较== === != <> !== < > <= >= <=>相等/全等/不等/全不等/比较三元运算符
逻辑&& and || or ! xor逻辑与、或、非、异或
位运算& | ^ ~ << >>按位与、或、异或、取反、左移、右移
三元与空合并?:?:??三元运算、简化三元、空合并运算 (?? PHP7+)

7. 流程控制

7.1 条件判断

if ($a > $b) {
  …
} elseif ($a === $b) {
  …
} else {
  …
}

// Switch
switch ($status) {
  case 0:
    …
    break;
  case 1:
    …
    break;
  default:
    …
}

7.2 循环

// while
while ($i < 10) {
  $i++;
}

// do…while
do {
  $i--;
} while ($i > 0);

// for
for ($i = 0; $i < 5; $i++) {
  echo $i;
}

// foreach
foreach ($arr as $val) {
  echo $val;
}
  • 可使用 breakcontinue 控制循环流程,也支持带层级参数的 break 2;

8. 函数

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

// 可变参数(PHP 5.6+)
function sum(...$nums) {
  return array_sum($nums);
}

// 匿名函数与闭包
$greet = function($name) {
  return "Hello, $name";
};

// 引用传参
function inc(&$n) {
  $n++;
}
  • 类型声明:参数和返回值可声明类型(标量类型、类名、arraycallable 等),在严格模式下强制检查;
  • 可变函数$func = 'add'; echo $func(1,2);
  • 高阶函数:可将函数作为参数或返回值。

9. 面向对象(OOP)

class Person {
  // 属性
  public string $name;
  protected int $age;
  private static int $count = 0;

  // 构造
  public function __construct(string $name, int $age) {
    $this->name = $name;
    $this->age = $age;
    self::$count++;
  }

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

  // 静态方法
  public static function getCount(): int {
    return self::$count;
  }
}

// 继承与接口
interface Talker {
  public function talk(): string;
}

class Employee extends Person implements Talker {
  public function talk(): string {
    return "Work mode";
  }
}

// 命名空间
namespace App\Models;
  • 可见性publicprotectedprivate
  • 静态成员:使用 static 关键字,通过 self:: 或 ClassName:: 访问;
  • Traits:代码复用片段,使用 use TraitName;
  • 魔术方法__construct__destruct__get__set__call__toString 等。

10. 命名空间与自动加载

namespace Vendor\Package;

class User { … }

// 引入
use Vendor\Package\User;

// PSR-4 自动加载:按照命名空间映射文件路径
  • Composer 根据 composer.json 中的 "autoload" 配置自动生成加载器。

11. 错误与异常

// 错误级别控制
error_reporting(E_ALL);
ini_set('display_errors', '1');

// 自定义错误处理
set_error_handler(function($errno, $errstr) {
  // 处理或记录
});

// 异常处理
try {
  throw new \Exception("出错");
} catch (\Throwable $e) {
  echo $e->getMessage();
} finally {
  // 必执行
}
  • PHP 7+ 中,Throwable 接口包括 Error 与 Exception

12. 常用超全局变量

变量名功能
$_GETHTTP GET 参数
$_POSTHTTP POST 参数
$_REQUEST合并 GET、POST、COOKIE
$_SESSION会话数据
$_COOKIE客户端 Cookie
$_SERVER服务器与执行环境信息
$_FILES上传文件信息
$_ENV环境变量

13. 脚本执行与 CLI

php script.php    # 执行脚本
php -a            # 交互模式
php -r 'echo 1;'
  • 可在脚本顶部添加 #!/usr/bin/env php 并赋予可执行权限,实现类 Shell 脚本效果。

以上内容覆盖了 PHP 语法的核心与常见高级特性。结合官方手册和实际项目练习,能帮助你快速上手并编写健壮、可维护的 PHP 代码。祝编码顺利!

类似文章

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注