php

php基础语法

  1. 变量与数据类型

    <?php
    $name = "minato"; // 字符串
    $age = 25; // 整数
    $price = 19.99; // 浮点数
    $isStudent = true; // 布尔值
    ?>
  2. 字符串操作

    $greeting = "hello, " . $name . "!";  // 拼接
    $length = strlen($greeting); // 长度
    $upper = strtoupper($greeting); // 转大写
  3. 常量与运算符

    define("PI", 3.14);                 // 定义常量
    $result = (10 + 5) * 2; // 算术运算
    $isAdult = ($age >= 18); // 比较运算
类型 作用 示例
单引号 纯字符串,不解析变量和转义字符(除\'\\ echo 'Cost: $price'; // 输出 Cost: $price
双引号 解析变量和转义字符(\n, \t等) echo "Cost: $price"; // 输出 Cost: 10
反引号 执行系统命令并返回输出 $output = ls -l; echo $output;

双引号变量解析

$user = 'John';
// 简单变量
echo "Hello $user"; // Hello John

// 复杂表达式用{}包裹
echo "Hello {$user}s"; // Hello Johns

// 数组元素
$data = ['name' => 'Mike'];
echo "Hello {$data['name']}"; // Hello Mike

可变变量

$varName = 'email';
$$varName = 'test@example.com'; // 创建变量 $email

echo $email; // 输出 test@example.com

// 实际应用场景
$fields = ['username', 'email', 'age'];
foreach($fields as $field) {
echo $$field; // 输出对应变量的值
}

定界符

处理多行字符串的优雅方式:

Heredoc(双引号效果)

$html = <<<HTML
<div class="container">
<h1>$title</h1>
<p>{$content}</p>
</div>
HTML;

Nowdoc(单引号效果)

$sql = <<<'SQL'
SELECT *
FROM users
WHERE status = 'active'
SQL;

其他运算符

1. 双目运算符

// 算术运算
$sum = 10 + 5; // 15
$mod = 10 % 3; // 1

// 字符串拼接
$name = 'John' . ' ' . 'Doe';

// 比较运算
$isEqual = (10 == '10'); // true(值相等)
$isIdentical = (10 === '10'); // false(类型不同)

// 逻辑运算
if ($age > 18 && $hasLicense) {
echo '可以驾驶';
}

2. 三目运算符

// 基本用法
$status = $isActive ? '激活' : '禁用';

// 嵌套使用
$message = $age >= 18
? ($age >= 65 ? '长者' : '成人')
: '未成年';

php流程控制

  1. 条件语句

    if ($age < 18) {
    echo "未成年人";
    } elseif ($age >= 60) {
    echo "老年人";
    } else {
    echo "成年人";
    }
  2. 循环结构

    // for循环
    for ($i = 1; $i <= 5; $i++) {
    echo "第{$i}次循环<br>";
    }

    // while循环
    $count = 0;
    while ($count < 3) {
    echo "Count: $count<br>";
    $count++;
    }

    // switch语句
    $day = date('N'); // 1-7 (周一至周日)

    switch($day) {
    case 1:
    case 2:
    case 3:
    case 4:
    case 5:
    echo '工作日';
    break;
    case 6:
    echo '周六';
    break;
    case 7:
    echo '周日';
    break;
    default:
    echo '无效日期';
    }

程序终止控制(exit/die)

方法 作用 示例
exit() 终止脚本执行,可返回状态码或消息 exit; exit('错误发生'); exit(1);
die() exit的别名,功能完全相同 die('数据库连接失败');
// 文件不存在时终止
$file = 'config.php';
if (!file_exists($file)) {
die("关键配置文件 $file 缺失!");
}

// 数据库连接失败
$conn = mysqli_connect('localhost', 'user', 'pass');
if (!$conn) {
exit('数据库连接失败: ' . mysqli_connect_error());
}

// API返回JSON后终止
header('Content-Type: application/json');
echo json_encode(['status' => 'success']);
exit; // 确保后续代码不会意外输出

php函数与数组

  1. 自定义函数

    function calculateArea($width, $height) {
    return $width * $height;
    }
    echo "面积: " . calculateArea(5, 10); // 输出50
  2. 数组操作

    // 索引数组
    $fruits = ["苹果", "香蕉", "橙子"];
    echo $fruits[1]; // 输出"香蕉"

    // 关联数组
    $user = [
    "name" => "李四",
    "email" => "lisi@example.com",
    "age" => 30
    ];
    echo $user["email"]; // 输出邮箱

    // 遍历数组
    foreach ($fruits as $fruit) {
    echo $fruit . "<br>";
    }

一、数组类型详解

1. 索引数组 vs 关联数组

// 索引数组(自动数字键)
$fruits = ['Apple', 'Banana', 'Orange'];

// 关联数组(自定义键名)
$user = [
'name' => 'John',
'email' => 'john@example.com',
'age' => 30
];

2. 多维数组

$company = [
'departments' => [
'sales' => [
'manager' => 'Alice',
'staff' => ['Bob', 'Charlie']
],
'it' => [
'manager' => 'David',
'projects' => [
['name' => 'Website', 'status' => 'completed'],
['name' => 'Mobile App', 'status' => 'in-progress']
]
]
]
];

// 访问多层数据
echo $company['departments']['it']['projects'][1]['name']; // Mobile App

二、数组创建与初始化

1. 多种创建方式

// 方括号语法(推荐)
$arr1 = [1, 2, 3];

// array() 构造
$arr2 = array('red', 'green', 'blue');

// 范围创建
$numbers = range(1, 10); // [1,2,3,4,5,6,7,8,9,10]

// 填充数组
$filled = array_fill(0, 5, 'default'); // ['default','default','default','default','default']

2. 特殊键名处理

$specialKeys = [
true => 'boolean true', // 转为1
false => 'boolean false', // 转为0
null => 'null value', // 转为空字符串
3.7 => 'float key', // 转为3(截断小数)
'07' => 'string key', // 保留字符串'07'
7 => 'integer key'
];

print_r($specialKeys);
/*
Array
(
[1] => boolean true
[0] => boolean false
[] => null value
[3] => float key
[07] => string key
[7] => integer key
)
*/

三、数组操作与遍历

1. 基本操作

$colors = ['red', 'green', 'blue'];

// 添加元素
$colors[] = 'yellow'; // 末尾添加
array_push($colors, 'purple'); // 同末尾添加
array_unshift($colors, 'black'); // 开头添加

// 删除元素
$last = array_pop($colors); // 移除末尾
$first = array_shift($colors); // 移除开头
unset($colors[1]); // 移除指定索引

// 更新元素
$colors[0] = 'white';

2. 遍历方法

// 1. foreach循环(最常用)
foreach ($colors as $color) {
echo $color . ' ';
}

// 2. 带键名的foreach
foreach ($user as $key => $value) {
echo "$key: $value\n";
}

// 3. for循环(仅适用索引数组)
for ($i = 0; $i < count($colors); $i++) {
echo $colors[$i] . ' ';
}

// 4. while + each(PHP7.2+已弃用)
// 不推荐使用

// 5. 数组指针遍历
reset($colors); // 重置指针
while (key($colors) !== null) {
echo current($colors) . ' ';
next($colors);
}

四、数组函数大全

1. 元素操作函数

函数 描述 示例
array_push() 末尾添加元素 array_push($arr, 'new')
array_pop() 移除末尾元素 $last = array_pop($arr)
array_unshift() 开头添加元素 array_unshift($arr, 'first')
array_shift() 移除开头元素 $first = array_shift($arr)
array_splice() 添加/移除元素 array_splice($arr, 1, 2, ['new1','new2'])

2. 键值操作函数

函数 描述 示例
array_keys() 获取所有键名 $keys = array_keys($user)
array_values() 获取所有值 $values = array_values($user)
array_key_exists() 检查键是否存在 if (array_key_exists('email', $user))
in_array() 检查值是否存在 if (in_array('John', $user))
array_search() 搜索值返回键 $key = array_search('John', $user)

3. 数组处理函数

函数 描述 示例
array_map() 应用回调到元素 $squared = array_map(fn($n) => $n**2, [1,2,3])
array_filter() 过滤数组元素 $evens = array_filter([1,2,3,4], fn($n) => $n%2==0)
array_reduce() 迭代简化数组 $sum = array_reduce([1,2,3], fn($carry, $n) => $carry+$n, 0)
array_walk() 应用回调到元素 array_walk($user, fn($v, $k) => echo "$k: $v\n")

4. 数组组合函数

函数 描述 示例
array_merge() 合并数组 $combined = array_merge($arr1, $arr2)
array_replace() 替换数组值 $replaced = array_replace($base, $updates)
array_combine() 创建关联数组 $assoc = array_combine(['name','age'], ['John',30])
array_flip() 交换键值 $flipped = array_flip($user)
array_unique() 移除重复值 $unique = array_unique([1,2,2,3])

5. 数组切片与分块

函数 描述 示例
array_slice() 截取数组片段 $part = array_slice($arr, 2, 3)
array_chunk() 分割数组块 $chunks = array_chunk($arr, 4)
array_column() 提取列数据 $names = array_column($users, 'name')

php面向对象编程

class User {
// 属性
public $name;
private $email; // 私有属性

// 构造方法
public function __construct($name, $email) {
$this->name = $name;
$this->email = $email;
}

// 方法
public function getEmail() {
return $this->email;
}
}

// 实例化
$user1 = new User("王五", "wangwu@example.com");
echo $user1->name; // 王五
echo $user1->getEmail(); // 邮箱(通过方法访问私有属性)

php表单处理

<!-- form.html -->
<form action="process.php" method="POST">
<input type="text" name="username" placeholder="用户名">
<input type="password" name="password" placeholder="密码">
<button type="submit">登录</button>
</form>
// process.php
<?php
// 获取表单数据
$username = $_POST['username'];
$password = $_POST['password'];

// 基础验证(实际需更严格检查)
if (!empty($username) && !empty($password)) {
echo "欢迎, $username!";
} else {
echo "请填写完整信息!";
}
?>

php数据库操作

<?php
// 连接数据库
$conn = new mysqli("localhost", "root", "password", "myDB");

// 检查连接
if ($conn->connect_error) {
die("连接失败: " . $conn->connect_error);
}

// 查询数据
$sql = "SELECT id, name, email FROM users";
$result = $conn->query($sql);

if ($result->num_rows > 0) {
while($row = $result->fetch_assoc()) {
echo "ID: " . $row["id"]. " - 姓名: " . $row["name"]. "<br>";
}
} else {
echo "0 结果";
}

// 插入数据(使用预处理防SQL注入)
$stmt = $conn->prepare("INSERT INTO users (name, email) VALUES (?, ?)");
$stmt->bind_param("ss", $name, $email); // ss表示两个字符串

$name = "新用户";
$email = "new@example.com";
$stmt->execute();

// 关闭连接
$conn->close();
?>

避坑指南

  1. 安全陷阱

    // 危险!直接输出用户输入
    echo $_GET['input'];

    // 修复方案:
    echo htmlspecialchars($_GET['input']); // 转义HTML
    $email = filter_var($_POST['email'], FILTER_VALIDATE_EMAIL); // 验证邮箱
  2. 常见错误处理

    // 开启错误报告(开发环境)
    ini_set('display_errors', 1);
    error_reporting(E_ALL);

    // 生产环境应记录错误而非显示
    ini_set('log_errors', 1);
    ini_set('error_log', '/path/to/php-error.log');
Author: wickt42
Link: http://example.com/2025/08/16/php/
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.