关键实施示例
1. 数据库层分离
// Bad - Mixed concerns class User { public function save() { $db = new PDO('mysql:host=localhost;dbname=app', 'user', 'pass'); $stmt = $db->prepare("INSERT INTO users (name, email) VALUES (?, ?)"); $stmt->execute([$this->name, $this->email]); } } // Good - Separated database logic class User { private string $name; private string $email; } class UserRepository { private PDO $db; public function save(User $user) { $stmt = $this->db->prepare("INSERT INTO users (name, email) VALUES (?, ?)"); $stmt->execute([$user->getName(), $user->getEmail()]); } }
这个很好的例子将数据结构(User)与存储逻辑(UserRepository)分开。这使得代码更易于维护,并且允许在不修改 User 类的情况下更改存储方法。
2. 验证分离
// Bad - Mixed validation and business logic class Order { public function process() { if (empty($this->items)) { throw new Exception('Order cannot be empty'); } if ($this->total getItems())) { $errors[] = 'Order cannot be empty'; } if ($order->getTotal() <p>验证逻辑移至专用验证器类,使 Order 类能够专注于业务逻辑。</p> <h3> 3.视图/模板分离 </h3> <pre class="brush:php;toolbar:false">// Bad - Mixed HTML and logic class ProductPage { public function show($id) { $product = $this->getProduct($id); echo "<h1 id="product-gt-name">{$product->name}</h1>"; echo "<p>Price: ${$product->price}</p>"; } } // Good - Separated presentation class ProductController { public function show($id) { $product = $this->productRepository->find($id); return $this->view->render('product/show', ['product' => $product]); } } // product/show.php template <h1 id="htmlspecialchars-product-gt-name-gt">= htmlspecialchars($product->name) ?></h1> <p>Price: $= htmlspecialchars($product->price) ?></p>
这个很好的例子将显示逻辑分离到模板中,使代码更易于维护,并允许设计人员独立工作。
4. 服务层分离
// Bad - Mixed business logic class OrderController { public function checkout() { $order = new Order($_POST['items']); $payment = new Payment($_POST['card']); $payment->process(); $order->updateStatus('paid'); $email = new EmailService(); $email->sendConfirmation($order); } } // Good - Separated services class OrderService { private PaymentService $paymentService; private EmailService $emailService; public function processOrder(Order $order, PaymentData $paymentData): void { $this->paymentService->process($paymentData); $order->updateStatus('paid'); $this->emailService->sendConfirmation($order); } } class OrderController { public function checkout() { $this->orderService->processOrder($order, $paymentData); } }
服务层处理复杂的业务逻辑,使控制器专注于请求处理。
5、配置分离
// Bad - Hardcoded configuration class EmailSender { private $host = 'smtp.example.com'; private $port = 587; public function send($message) { // Sending logic using hardcoded values } } // Good - Separated configuration // config/mail.php return [ 'host' => 'smtp.example.com', 'port' => 587 ]; class EmailSender { private array $config; public function __construct(array $config) { $this->config = $config; } public function send($message) { // Sending logic using config values } }
配置与实现分离,使代码更加灵活和可维护。无需修改代码即可更改设置。
以上是关注点分离 (SoC)的详细内容。更多信息请关注PHP中文网其他相关文章!

Laravel使用其直观的闪存方法简化了处理临时会话数据。这非常适合在您的应用程序中显示简短的消息,警报或通知。 默认情况下,数据仅针对后续请求: $请求 -

PHP日志记录对于监视和调试Web应用程序以及捕获关键事件,错误和运行时行为至关重要。它为系统性能提供了宝贵的见解,有助于识别问题并支持更快的故障排除

PHP客户端URL(curl)扩展是开发人员的强大工具,可以与远程服务器和REST API无缝交互。通过利用Libcurl(备受尊敬的多协议文件传输库),PHP curl促进了有效的执行

Laravel 提供简洁的 HTTP 响应模拟语法,简化了 HTTP 交互测试。这种方法显着减少了代码冗余,同时使您的测试模拟更直观。 基本实现提供了多种响应类型快捷方式: use Illuminate\Support\Facades\Http; Http::fake([ 'google.com' => 'Hello World', 'github.com' => ['foo' => 'bar'], 'forge.laravel.com' =>

您是否想为客户最紧迫的问题提供实时的即时解决方案? 实时聊天使您可以与客户进行实时对话,并立即解决他们的问题。它允许您为您的自定义提供更快的服务

文章讨论了PHP 5.3中引入的PHP中的晚期静态结合(LSB),从而允许静态方法的运行时分辨率调用以获得更灵活的继承。 LSB的实用应用和潜在的触摸


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

ZendStudio 13.5.1 Mac
功能强大的PHP集成开发环境

适用于 Eclipse 的 SAP NetWeaver 服务器适配器
将Eclipse与SAP NetWeaver应用服务器集成。

mPDF
mPDF是一个PHP库,可以从UTF-8编码的HTML生成PDF文件。原作者Ian Back编写mPDF以从他的网站上“即时”输出PDF文件,并处理不同的语言。与原始脚本如HTML2FPDF相比,它的速度较慢,并且在使用Unicode字体时生成的文件较大,但支持CSS样式等,并进行了大量增强。支持几乎所有语言,包括RTL(阿拉伯语和希伯来语)和CJK(中日韩)。支持嵌套的块级元素(如P、DIV),

SecLists
SecLists是最终安全测试人员的伙伴。它是一个包含各种类型列表的集合,这些列表在安全评估过程中经常使用,都在一个地方。SecLists通过方便地提供安全测试人员可能需要的所有列表,帮助提高安全测试的效率和生产力。列表类型包括用户名、密码、URL、模糊测试有效载荷、敏感数据模式、Web shell等等。测试人员只需将此存储库拉到新的测试机上,他就可以访问到所需的每种类型的列表。