PHP基础核心知识及学习路径

PHP基础核心知识

1. 基本语法
<?php  // 起始标签
echo "Hello World!";  // 输出语句
$variable = "值";     // 变量声明
?>  <!-- 结束标签 -->
2. 数据类型
类型示例说明
String$str = "PHP"字符串
Integer$num = 42整型
Float$pi = 3.14浮点型
Boolean$flag = true布尔值
Array$arr = [1, 2]数组
Object$obj = new Class()对象
NULL$x = null空值
3. 流程控制
// 条件语句
if ($age > 18) {
    echo "成年人";
} elseif ($age > 13) {
    echo "青少年";
} else {
    echo "儿童";
}

// 循环结构
for ($i = 0; $i < 5; $i++) {
    echo $i;
}

foreach ($colors as $color) {
    echo $color;
}
4. 函数定义
function sum(int $a, int $b): int {
    return $a + $b;
}
echo sum(5, 3);  // 输出8
5. 数组操作
// 索引数组
$fruits = ["Apple", "Banana"];

// 关联数组
$person = [
    "name" => "John",
    "age" => 30
];

// 多维数组
$matrix = [
    [1, 2],
    [3, 4]
];
6. 超全局变量
变量描述
$_GET获取URL参数
$_POST接收表单数据
$_SESSION会话变量
$_COOKIE客户端Cookies
$_SERVER服务器信息
$_FILES文件上传数据
7. 表单处理
<!-- HTML表单 -->
<form method="POST" action="process.php">
    <input type="text" name="username">
    <input type="submit">
</form>
// process.php
$name = $_POST['username'];
echo "欢迎, $name!";
8. 文件操作
// 写入文件
file_put_contents("log.txt", "记录内容");

// 读取文件
$content = file_get_contents("log.txt");

// 文件上传
move_uploaded_file($_FILES['file']['tmp_name'], "uploads/".$_FILES['file']['name']);
9. 数据库连接 (MySQLi)
$conn = new mysqli("localhost", "user", "pass", "db");

// 查询数据
$result = $conn->query("SELECT * FROM users");
while ($row = $result->fetch_assoc()) {
    echo $row['username'];
}

// 插入数据
$conn->query("INSERT INTO users (email) VALUES ('test@example.com')");

$conn->close();  // 关闭连接
10. 错误处理
try {
    // 可能出错的代码
    $file = fopen("missing.txt", "r");
} catch (Exception $e) {
    // 异常处理
    echo "错误: " . $e->getMessage();
}

// 自定义错误处理
set_error_handler(function($errno, $errstr) {
    echo "<b>错误:</b> [$errno] $errstr";
});
11. 面向对象编程
class Car {
    // 属性
    public $model;
    
    // 构造函数
    public function __construct($model) {
        $this->model = $model;
    }
    
    // 方法
    public function getModel(): string {
        return "车型: " . $this->model;
    }
}

// 实例化对象
$myCar = new Car("Tesla");
echo $myCar->getModel();

最佳实践建议:

  1. 始终对用户输入进行验证和过滤
  2. 使用预处理语句防止SQL注入
  3. 错误报告设置(开发环境):
    ini_set('display_errors', 1);
    error_reporting(E_ALL);
    
  4. 生产环境关闭错误显示
  5. 使用Composer管理依赖
  6. 遵循PSR编码规范

学习资源

掌握这些基础后,可进一步学习:

  • 命名空间(Namespace)
  • 自动加载(Autoloading)
  • 依赖注入
  • RESTful API开发
  • 主流框架(Laravel/Symfony)

PHP基础核心知识

1. 基本语法
<?php  // 起始标签
echo "Hello World!";  // 输出语句
$variable = "值";     // 变量声明
?>  <!-- 结束标签 -->
2. 数据类型
类型示例说明
String$str = "PHP"字符串
Integer$num = 42整型
Float$pi = 3.14浮点型
Boolean$flag = true布尔值
Array$arr = [1, 2]数组
Object$obj = new Class()对象
NULL$x = null空值
3. 流程控制
// 条件语句
if ($age > 18) {
    echo "成年人";
} elseif ($age > 13) {
    echo "青少年";
} else {
    echo "儿童";
}

// 循环结构
for ($i = 0; $i < 5; $i++) {
    echo $i;
}

foreach ($colors as $color) {
    echo $color;
}
4. 函数定义
function sum(int $a, int $b): int {
    return $a + $b;
}
echo sum(5, 3);  // 输出8
5. 数组操作
// 索引数组
$fruits = ["Apple", "Banana"];

// 关联数组
$person = [
    "name" => "John",
    "age" => 30
];

// 多维数组
$matrix = [
    [1, 2],
    [3, 4]
];
6. 超全局变量
变量描述
$_GET获取URL参数
$_POST接收表单数据
$_SESSION会话变量
$_COOKIE客户端Cookies
$_SERVER服务器信息
$_FILES文件上传数据
7. 表单处理
<!-- HTML表单 -->
<form method="POST" action="process.php">
    <input type="text" name="username">
    <input type="submit">
</form>
// process.php
$name = $_POST['username'];
echo "欢迎, $name!";
8. 文件操作
// 写入文件
file_put_contents("log.txt", "记录内容");

// 读取文件
$content = file_get_contents("log.txt");

// 文件上传
move_uploaded_file($_FILES['file']['tmp_name'], "uploads/".$_FILES['file']['name']);
9. 数据库连接 (MySQLi)
$conn = new mysqli("localhost", "user", "pass", "db");

// 查询数据
$result = $conn->query("SELECT * FROM users");
while ($row = $result->fetch_assoc()) {
    echo $row['username'];
}

// 插入数据
$conn->query("INSERT INTO users (email) VALUES ('test@example.com')");

$conn->close();  // 关闭连接
10. 错误处理
try {
    // 可能出错的代码
    $file = fopen("missing.txt", "r");
} catch (Exception $e) {
    // 异常处理
    echo "错误: " . $e->getMessage();
}

// 自定义错误处理
set_error_handler(function($errno, $errstr) {
    echo "<b>错误:</b> [$errno] $errstr";
});
11. 面向对象编程
class Car {
    // 属性
    public $model;
    
    // 构造函数
    public function __construct($model) {
        $this->model = $model;
    }
    
    // 方法
    public function getModel(): string {
        return "车型: " . $this->model;
    }
}

// 实例化对象
$myCar = new Car("Tesla");
echo $myCar->getModel();

12. 面向对象编程(OOP)深入

类与对象的高级特性

// 抽象类示例
abstract class Animal {
    protected $name;
    
    public function __construct($name) {
        $this->name = $name;
    }
    
    abstract public function makeSound();
}

// 接口示例
interface Flyable {
    public function fly();
}

// 继承与实现
class Bird extends Animal implements Flyable {
    public function makeSound() {
        return "Chirp!";
    }
    
    public function fly() {
        return $this->name . " is flying!";
    }
}

// 静态方法与属性
class Counter {
    public static $count = 0;
    
    public static function increment() {
        self::$count++;
    }
}

// 使用
$parrot = new Bird("Polly");
echo $parrot->fly(); // Polly is flying!
Counter::increment();

魔术方法应用

class Product {
    private $data = [];
    
    public function __set($name, $value) {
        $this->data[$name] = $value;
    }
    
    public function __get($name) {
        return $this->data[$name] ?? null;
    }
    
    public function __toString() {
        return json_encode($this->data);
    }
}

$product = new Product();
$product->name = "Laptop";
echo $product; // {"name":"Laptop"}

13. 命名空间与自动加载

现代代码组织方式

// 文件: src/Utils/Validator.php
namespace App\Utils;

class Validator {
    public static function email($email) {
        return filter_var($email, FILTER_VALIDATE_EMAIL);
    }
}

// 文件: index.php
require 'vendor/autoload.php'; // Composer自动加载

use App\Utils\Validator;

if (Validator::email('test@example.com')) {
    echo "Valid email";
}

14. 错误与异常处理

分层错误处理

// 自定义异常类
class DatabaseException extends \Exception {
    public function logError() {
        error_log("DB Error: {$this->getMessage()}");
    }
}

try {
    // 数据库操作
    if (!$db->connect()) {
        throw new DatabaseException("Connection failed");
    }
} catch (DatabaseException $e) {
    $e->logError();
    echo "Database error occurred";
} catch (\Exception $e) {
    echo "General error: " . $e->getMessage();
} finally {
    echo "Operation attempted";
}

15. 现代数据库操作(PDO)

安全数据库交互

// 创建连接
$pdo = new PDO('mysql:host=localhost;dbname=test;charset=utf8', 'user', 'pass', [
    PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
]);

// 预处理语句防止SQL注入
$stmt = $pdo->prepare("SELECT * FROM users WHERE email = :email");
$stmt->execute(['email' => $email]);
$user = $stmt->fetch(PDO::FETCH_ASSOC);

// 事务处理
try {
    $pdo->beginTransaction();
    
    $pdo->exec("UPDATE accounts SET balance = balance - 100 WHERE id = 1");
    $pdo->exec("UPDATE accounts SET balance = balance + 100 WHERE id = 2");
    
    $pdo->commit();
} catch (Exception $e) {
    $pdo->rollBack();
    echo "Transaction failed: " . $e->getMessage();
}

16. 文件与流处理

高效文件操作

// 大文件读取(迭代器)
function readLargeFile($file) {
    $handle = fopen($file, 'r');
    
    while (!feof($handle)) {
        yield trim(fgets($handle));
    }
    
    fclose($handle);
}

foreach (readLargeFile('huge.log') as $line) {
    // 处理每行
}

// 文件上传处理
$uploadDir = __DIR__ . '/uploads/';

if ($_FILES['file']['error'] === UPLOAD_ERR_OK) {
    $filename = uniqid() . '_' . basename($_FILES['file']['name']);
    $dest = $uploadDir . $filename;
    
    if (move_uploaded_file($_FILES['file']['tmp_name'], $dest)) {
        echo "File uploaded successfully";
    }
}

17. 安全编程实践

关键安全措施

// 1. 输入验证
$email = filter_input(INPUT_POST, 'email', FILTER_VALIDATE_EMAIL);
$age = filter_var($_POST['age'], FILTER_VALIDATE_INT, [
    'options' => ['min_range' => 18, 'max_range' => 65]
]);

// 2. 输出转义
echo htmlspecialchars($userInput, ENT_QUOTES, 'UTF-8');

// 3. 密码处理
$hash = password_hash($password, PASSWORD_ARGON2ID);
if (password_verify($inputPassword, $hash)) {
    // 登录成功
}

// 4. CSRF防护
session_start();
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    if (!hash_equals($_SESSION['csrf_token'], $_POST['csrf_token'])) {
        die("Invalid CSRF token");
    }
}

18. PHP与Web API开发

RESTful API示例

header('Content-Type: application/json');

$response = [
    'status' => 'error',
    'message' => ''
];

try {
    $method = $_SERVER['REQUEST_METHOD'];
    $resource = explode('/', trim($_SERVER['PATH_INFO'], '/'));
    
    switch ($method) {
        case 'GET':
            // 获取资源逻辑
            $response['status'] = 'success';
            $response['data'] = ['id' => 1, 'name' => 'Example'];
            break;
            
        case 'POST':
            // 创建资源逻辑
            $input = json_decode(file_get_contents('php://input'), true);
            // 验证和保存数据
            $response['status'] = 'success';
            $response['message'] = 'Resource created';
            http_response_code(201);
            break;
            
        default:
            http_response_code(405);
            $response['message'] = 'Method not allowed';
    }
    
} catch (Exception $e) {
    http_response_code(500);
    $response['message'] = $e->getMessage();
}

echo json_encode($response);

19. 性能优化技巧

高效PHP编程

// 1. 使用内置函数
$array = [1, 2, 3];
$sum = array_sum($array); // 比循环更快

// 2. 避免在循环中重复计算
$count = count($array);
for ($i = 0; $i < $count; $i++) { ... }

// 3. 使用输出缓冲
ob_start();
// 复杂输出操作...
$output = ob_get_clean();

// 4. 选择高效数据结构
$set = new SplObjectStorage(); // 优于数组用于对象集合

// 5. 启用OPcache (php.ini)
opcache.enable=1
opcache.memory_consumption=128

20. Composer包管理

现代PHP开发核心

// composer.json 示例
{
    "name": "my/app",
    "require": {
        "monolog/monolog": "^2.0",
        "guzzlehttp/guzzle": "^7.0"
    },
    "autoload": {
        "psr-4": {
            "MyApp\\": "src/"
        }
    },
    "scripts": {
        "test": "phpunit"
    }
}

常用命令:

composer install     # 安装依赖
composer update      # 更新依赖
composer dump-autoload # 更新自动加载
composer require package # 添加新包

21. 测试驱动开发

PHPUnit示例

// tests/CalculatorTest.php
use PHPUnit\Framework\TestCase;

class CalculatorTest extends TestCase {
    public function testAdd() {
        $calc = new Calculator();
        $this->assertEquals(5, $calc->add(2, 3));
    }
}

// src/Calculator.php
class Calculator {
    public function add($a, $b) {
        return $a + $b;
    }
}

运行测试:

./vendor/bin/phpunit tests

22. 异步编程(ReactPHP)

非阻塞I/O示例

require 'vendor/autoload.php';

$loop = React\EventLoop\Factory::create();

// 定时器
$loop->addPeriodicTimer(1, function () {
    echo "Tick\n";
});

// HTTP服务器
$server = new React\Http\HttpServer(function (Psr\Http\Message\ServerRequestInterface $request) {
    return new React\Http\Message\Response(
        200,
        ['Content-Type' => 'text/plain'],
        "Hello World!\n"
    );
});

$socket = new React\Socket\SocketServer('127.0.0.1:8080', [], $loop);
$server->listen($socket);

echo "Server running at http://127.0.0.1:8080\n";
$loop->run();

23. 扩展PHP功能

自定义扩展开发

// hello.c
#include "php.h"

PHP_FUNCTION(hello_world) {
    php_printf("Hello World!\n");
}

static zend_function_entry hello_functions[] = {
    PHP_FE(hello_world, NULL)
    PHP_FE_END
};

zend_module_entry hello_module_entry = {
    STANDARD_MODULE_HEADER,
    "hello",
    hello_functions,
    NULL, NULL, NULL, NULL, NULL,
    "1.0.0",
    STANDARD_MODULE_PROPERTIES
};

ZEND_GET_MODULE(hello)

编译安装后:

hello_world(); // 输出 "Hello World!"

最佳实践建议:

  1. 始终对用户输入进行验证和过滤
  2. 使用预处理语句防止SQL注入
  3. 错误报告设置(开发环境):
    ini_set('display_errors', 1);
    error_reporting(E_ALL);
    
  4. 生产环境关闭错误显示
  5. 使用Composer管理依赖
  6. 遵循PSR编码规范

进阶学习路径:

  1. 设计模式:单例、工厂、观察者、策略等
  2. 框架学习:Laravel、Symfony内部机制
  3. 性能分析:Xdebug、Blackfire使用
  4. 微服务架构:Swoole、RoadRunner
  5. 领域驱动设计:DDD在PHP中的实践
  6. PHP内部机制:Zend引擎、OPcache原理

学习资源

掌握这些基础后,可进一步学习:

  • 命名空间(Namespace)
  • 自动加载(Autoloading)
  • 依赖注入
  • RESTful API开发
  • 主流框架(Laravel/Symfony)

掌握这些知识后,你将能够构建高性能、可维护的企业级PHP应用,并深入理解语言内部机制。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值