本文目录导读:

我来详细介绍PHP代码共享(Code Sharing)的几种方式:
传统方式:include/require
基础用法
// 公共函数文件 functions.php
<?php
function getUserById($id) {
return ['id' => $id, 'name' => '用户'];
}
function formatDate($date) {
return date('Y-m-d', strtotime($date));
}
?>
// 使用文件 file.php
<?php
require_once 'functions.php'; // 或 include_once
require_once 'config.php'; // 配置文件
$user = getUserById(1);
echo $user['name'];
include vs require 区别
include 'file.php'; // 文件不存在警告,继续执行 require 'file.php'; // 文件不存在致命错误,停止执行 include_once 'file.php'; // 只加载一次 require_once 'file.php'; // 只加载一次
面向对象方式:命名空间和自动加载
创建共享类
// src/Logger.php
<?php
namespace App\Utils;
class Logger {
public function log($message) {
echo "[" . date('Y-m-d H:i:s') . "] " . $message . "\n";
}
}
PSR-4自动加载
// composer.json
{
"autoload": {
"psr-4": {
"App\\": "src/"
}
}
}
// index.php
<?php
require_once 'vendor/autoload.php';
use App\Utils\Logger;
$logger = new Logger();
$logger->log('系统启动');
使用Composer管理依赖
创建自己的包
project/
├── composer.json
├── src/
│ ├── Service/
│ │ └── UserService.php
│ └── Utils/
│ └── Helper.php
└── tests/
{
"name": "mycompany/my-utils",
"description": "公共工具类",
"require": {
"php": ">=7.4"
},
"autoload": {
"psr-4": {
"MyCompany\\Utils\\": "src/"
}
}
}
在其他项目中使用
{
"require": {
"mycompany/my-utils": "^1.0"
},
"repositories": [
{
"type": "vcs",
"url": "https://github.com/mycompany/my-utils.git"
}
]
}
Git子模块/子树
Git Submodule
# 添加子模块 git submodule add https://github.com/company/common-lib.git libs/common # 更新子模块 git submodule update --init --recursive # 拉取最新代码 git submodule foreach git pull origin master
Git Subtree(推荐)
# 添加子树 git subtree add --prefix=libs/common https://github.com/company/common-lib.git main --squash # 更新子树 git subtree pull --prefix=libs/common https://github.com/company/common-lib.git main --squash # 推送回源仓库 git subtree push --prefix=libs/common https://github.com/company/common-lib.git main
微服务/RPC服务
RESTful API共享
// 公共服务端
<?php
// api/user.php
header('Content-Type: application/json');
$users = [
1 => ['name' => '张三', 'email' => 'zhang@example.com'],
2 => ['name' => '李四', 'email' => 'li@example.com']
];
$id = $_GET['id'] ?? 0;
echo json_encode($users[$id] ?? ['error' => 'User not found']);
// 客户端调用
<?php
function getUserApi($id) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://api.example.com/user.php?id={$id}");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);
return json_decode($response, true);
}
$user = getUserApi(1);
实战示例:构建共享代码库
创建共享包结构
common-library/
├── composer.json
├── src/
│ ├── Config/
│ ├── Models/
│ ├── Services/
│ └── Traits/
├── tests/
├── README.md
└── LICENSE
使用示例
// composer.json (项目使用)
{
"repositories": [
{
"type": "path",
"url": "../common-library"
}
],
"require": {
"mycompany/common": "dev-main"
}
}
实际项目结构
myproject/
├── app/
│ ├── Controllers/
│ └── Models/
├── libs/
│ └── common/ # 共享代码库
├── vendor/ # Composer依赖
├── public/
└── tests/
最佳实践建议
代码共享规范
// 1. 使用接口定义契约
interface UserServiceInterface {
public function getUser(int $id): ?array;
public function createUser(array $data): bool;
}
// 2. 使用Traits共享通用方法
trait ApiResponseTrait {
protected function success($data, $message = '') {
return [
'code' => 200,
'message' => $message,
'data' => $data
];
}
protected function error($message, $code = 400) {
return [
'code' => $code,
'message' => $message
];
}
}
// 3. 抽象类定义通用功能
abstract class BaseService {
protected $logger;
public function __construct(Logger $logger) {
$this->logger = $logger;
}
protected function log($message) {
$this->logger->log(get_class($this) . ': ' . $message);
}
}
自动化共享方案
CI/CD自动集成
# .gitlab-ci.yml
stages:
- build
- test
- deploy
build:
stage: build
script:
- composer install
- composer build
test:
stage: test
script:
- phpunit
deploy:
stage: deploy
script:
- rsync -avz --delete public/ user@server:/var/www/html/
选择建议
| 场景 | 推荐方案 |
|---|---|
| 小型项目 | include/require |
| 中型项目 | Composer + PSR-4 |
| 多项目共享 | Git Subtree + Composer |
| 团队协作 | Git + Composer + CI/CD |
| 跨语言/远程 | REST API/微服务 |
推荐组合:
- 使用 Composer 管理依赖
- 采用 PSR-4 自动加载规范
- 将共享代码放在独立 Git仓库
- 使用 CI/CD 自动化构建和测试
- 为共享代码编写良好的文档和测试
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播