早期 PHP 以程序式為主,現代框架(Laravel, Symfony)皆以 OOP 為核心。良好的 OOP 習慣決定專案長期可維護性。本文整理七大核心習慣,對應封裝、耦合、內聚、多型、設計模式等關鍵面向。
private,透過 public 存取方法(getter/setter)控制存取。public $items = []; 改為 private $items = []; + getItems(),未來可改用 Collection 物件而不影響呼叫端。$order->getCustomer()->getAddress()->getCity()->getName()。getCustomerCityName() 或使用 DTO 扁平化資料。public function __construct(LoggerInterface $logger)。trait 可作為橫切關注點複用,但需謹慎避免命名衝突。$eventDispatcher->dispatch(new OrderCreated($order))。// 違反習慣 1,2,3,5
class UserController {
public function register(Request $request) {
$user = new User();
$user->name = $request->name; // 直接存取屬性
$user->email = $request->email;
$user->password = md5($request->pwd); // 弱雜湊、邏輯外洩
$user->save();
Mail::send('welcome', ['user' => $user]); // 耦合郵件發送
return redirect('/login');
}
}
// 遵循七大習慣
class UserController {
public function __construct(
private UserRepository $repo,
private PasswordHasher $hasher,
private EventDispatcher $events
) {}
public function register(RegisterRequest $request) {
$user = User::create(
$request->name,
$request->email,
$this->hasher->hash($request->password)
);
$this->repo->save($user);
$this->events->dispatch(new UserRegistered($user));
return redirect('/login');
}
}
七大習慣核心在於封裝變化點、依賴抽象、組合行為。持續練習、Code Review 互相檢視、引入靜態分析(PHPStan Level 8+),能讓團隊內化為肌肉記憶。