本文目录导读:

在PHP中提高代码复用性是编写高质量、可维护代码的关键,以下是全面的策略,从基础到进阶:
面向对象编程(OOP)
继承(Inheritance)
abstract class Database {
protected $connection;
abstract public function connect();
public function query($sql) {
// 通用查询逻辑
}
}
class MySQLDatabase extends Database {
public function connect() {
$this->connection = new PDO('mysql:...');
}
}
class PostgreSQLDatabase extends Database {
public function connect() {
$this->connection = new PDO('pgsql:...');
}
}
接口(Interface)
interface PaymentGateway {
public function processPayment($amount);
public function refund($transactionId);
}
class StripePayment implements PaymentGateway {
public function processPayment($amount) {
// Stripe 实现
}
public function refund($transactionId) {
// Stripe 退款实现
}
}
Traits(个性特征)
trait Loggable {
public function log($message) {
echo "[".date('Y-m-d H:i:s')."] $message\n";
}
public function emergencyLog($message) {
$this->log("EMERGENCY: $message");
}
}
class UserService {
use Loggable;
public function createUser($data) {
$this->log("Creating new user");
// 业务逻辑
}
}
设计模式
单例模式
class DatabaseConnection {
private static $instance = null;
private $connection;
private function __construct() {
$this->connection = new PDO('mysql:...');
}
public static function getInstance() {
if (self::$instance === null) {
self::$instance = new self();
}
return self::$instance;
}
}
工厂模式
interface Notifier {
public function send($to, $message);
}
class EmailNotifier implements Notifier {
public function send($to, $message) {
// 发送邮件
}
}
class SMSNotifier implements Notifier {
public function send($to, $message) {
// 发送短信
}
}
class NotifierFactory {
public static function create($type) {
switch ($type) {
case 'email':
return new EmailNotifier();
case 'sms':
return new SMSNotifier();
default:
throw new Exception("Unknown notifier type");
}
}
}
组合模式
class Validator {
private $rules = [];
public function addRule(callable $rule) {
$this->rules[] = $rule;
}
public function validate($data) {
foreach ($this->rules as $rule) {
if (!$rule($data)) {
return false;
}
}
return true;
}
}
函数与工具类
通用工具函数
class StringHelper {
public static function truncate($text, $length = 100) {
if (strlen($text) <= $length) {
return $text;
}
return substr($text, 0, $length - 3) . '...';
}
public static function slugify($text) {
$text = strtolower($text);
$text = preg_replace('/[^a-z0-9-]/', '-', $text);
$text = preg_replace('/-+/', '-', $text);
return trim($text, '-');
}
}
class ArrayHelper {
public static function flatten($array, $prefix = '') {
$result = [];
foreach ($array as $key => $value) {
if (is_array($value)) {
$result = array_merge($result, self::flatten($value, $prefix.$key.'.'));
} else {
$result[$prefix.$key] = $value;
}
}
return $result;
}
}
依赖注入容器
class Container {
private $instances = [];
private $definitions = [];
public function set($key, $definition) {
$this->definitions[$key] = $definition;
}
public function get($key) {
if (!isset($this->instances[$key])) {
$this->instances[$key] = $this->resolve($key);
}
return $this->instances[$key];
}
private function resolve($key) {
$definition = $this->definitions[$key];
if (is_callable($definition)) {
return $definition($this);
}
return new $definition();
}
}
// 使用
$container = new Container();
$container->set('database', function($c) {
return new DatabaseConnection($c->get('config'));
});
$database = $container->get('database');
服务层设计
interface UserServiceInterface {
public function createUser(array $data);
public function updateUser($id, array $data);
public function deleteUser($id);
}
class UserService implements UserServiceInterface {
private $userRepository;
private $validator;
private $eventDispatcher;
public function __construct(
UserRepositoryInterface $userRepository,
ValidatorInterface $validator,
EventDispatcherInterface $eventDispatcher
) {
$this->userRepository = $userRepository;
$this->validator = $validator;
$this->eventDispatcher = $eventDispatcher;
}
public function createUser(array $data) {
if (!$this->validator->validate($data)) {
throw new ValidationException('Invalid data');
}
$user = new User($data);
$this->userRepository->save($user);
$this->eventDispatcher->dispatch(new UserCreatedEvent($user));
return $user;
}
}
事件驱动编程
class EventDispatcher {
private $listeners = [];
public function addListener($event, callable $listener) {
$this->listeners[$event][] = $listener;
}
public function dispatch($event, $data = null) {
if (!isset($this->listeners[$event])) {
return;
}
foreach ($this->listeners[$event] as $listener) {
call_user_func($listener, $data);
}
}
}
// 业务逻辑
$dispatcher = new EventDispatcher();
$dispatcher->addListener('user.created', function($user) {
// 发送欢迎邮件
});
$dispatcher->addListener('user.created', function($user) {
// 记录日志
});
使用Composer与代码包
{
"require": {
"guzzlehttp/guzzle": "^7.0",
"monolog/monolog": "^2.0"
},
"autoload": {
"psr-4": {
"App\\": "src/",
"App\\Services\\": "src/services/"
}
}
}
模板方法模式
abstract class DataExporter {
public function export($data) {
$data = $this->prepareData($data);
$formatted = $this->formatData($data);
$this->saveData($formatted);
}
protected function prepareData($data) {
// 通用数据处理
return $data;
}
abstract protected function formatData($data);
abstract protected function saveData($data);
}
class CSVExporter extends DataExporter {
protected function formatData($data) {
// CSV 格式化
}
protected function saveData($data) {
// 保存CSV文件
}
}
最佳实践建议
分层架构
- Controller (控制器层) - Request -> Validate -> Call Service -> Response - Service (服务层) - 业务逻辑,事务管理 - Repository (数据访问层) - 数据库操作,查询封装 - Model (模型层) - 数据结构,业务规则
使用静态工具
class DateHelper {
public static function getAge($birthdate) {
$birth = new DateTime($birthdate);
$now = new DateTime();
return $birth->diff($now)->y;
}
}
参数配置化
class EmailService {
private $config;
public function __construct(array $config) {
$this->config = $config;
}
public function send($to, $subject, $body) {
// 使用 $this->config['smtp_host'] 等
}
}
// 配置文件
$config = [
'smtp_host' => 'smtp.example.com',
'smtp_port' => 587,
'smtp_user' => 'user',
'smtp_pass' => 'pass'
];
代码审查清单
- ✅ 避免代码重复(DRY原则)
- ✅ 单一职责原则(SRP)
- ✅ 开闭原则(OCP)
- ✅ 使用接口而非具体类
- ✅ 充分利用Composer包
- ✅ 合理使用 Traits
- ✅ 设计模式的应用
- ✅ 参数化配置
- ✅ 编写单元测试
- ✅ 使用代码生成模板
通过运用这些策略,可以显著提高PHP代码的复用性,降低维护成本,并提升开发效率,最好的代码复用是模块化、解耦和通用性的综合体现。
版权声明: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直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播