<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                ## 一、單一職責原則(SRP) > 一個類應該只有一個引起它變化的原因。 ### ? 意義: 讓類職責更清晰,降低耦合,增強可維護性。 ### ? 違反示例: ~~~ php復制編輯class User { public function create(array $data) { // 保存用戶到數據庫 } public function sendWelcomeEmail() { // 發送歡迎郵件 } } ~~~ 這違反了 SRP,因為一個類負責了兩個職責:用戶創建和郵件發送。 ### ? 遵守示例: ~~~ php復制編輯class User { public function create(array $data) { // 只負責創建用戶 } } class WelcomeMailer { public function send(string $email) { // 只負責發送歡迎郵件 } } ~~~ * * * ## 二、開閉原則(OCP) > 軟件實體應該對擴展開放,對修改關閉。 ### ? 意義: 不改動原有代碼的前提下擴展功能。 ### ? 違反示例: ~~~ php復制編輯class Payment { public function pay($type) { if ($type == 'wechat') { // 微信支付邏輯 } elseif ($type == 'alipay') { // 支付寶邏輯 } } } ~~~ 新增一種支付方式時就得改動這個類。 ### ? 遵守示例(使用策略模式): ~~~ php復制編輯interface PayStrategy { public function pay(); } class WechatPay implements PayStrategy { public function pay() { echo "使用微信支付"; } } class Alipay implements PayStrategy { public function pay() { echo "使用支付寶支付"; } } class Payment { protected PayStrategy $payStrategy; public function __construct(PayStrategy $strategy) { $this->payStrategy = $strategy; } public function pay() { $this->payStrategy->pay(); } } ~~~ * * * ## 三、里氏替換原則(LSP) > 子類對象能夠替換其父類對象,并保證程序行為不變。 ### ? 意義: 子類必須能夠完全替代父類,不影響原有功能。 ### ? 違反示例: ~~~ php復制編輯class Bird { public function fly() { echo "會飛"; } } class Ostrich extends Bird { public function fly() { throw new Exception("鴕鳥不會飛"); } } ~~~ `Ostrich` 無法替代 `Bird` 使用,違背里氏替換原則。 ### ? 遵守示例: 將會飛的鳥和不會飛的鳥拆分為不同的抽象: ~~~ php復制編輯abstract class Bird {} interface Flyable { public function fly(); } class Sparrow extends Bird implements Flyable { public function fly() { echo "麻雀飛"; } } class Ostrich extends Bird { // 不實現 Flyable 接口 } ~~~ * * * ## 四、依賴倒置原則(DIP) > 高層模塊不應該依賴低層模塊,二者都應該依賴抽象。 ### ? 意義: 通過依賴接口(抽象)而不是具體類,使系統更可擴展和解耦。 ### ? 違反示例: ~~~ php復制編輯class MySQLDatabase { public function connect() { echo "連接 MySQL"; } } class UserRepository { protected $db; public function __construct() { $this->db = new MySQLDatabase(); // 依賴了具體類 } } ~~~ ### ? 遵守示例(使用依賴注入): ~~~ php復制編輯interface DatabaseInterface { public function connect(); } class MySQLDatabase implements DatabaseInterface { public function connect() { echo "連接 MySQL"; } } class UserRepository { protected DatabaseInterface $db; public function __construct(DatabaseInterface $db) { $this->db = $db; } } ~~~ * * * ## 五、接口隔離原則(ISP) > 客戶端不應被迫依賴它不使用的接口。 ### ? 意義: 應將胖接口拆分為多個小接口,滿足特定客戶端的需求。 ### ? 違反示例: ~~~ php復制編輯interface Worker { public function work(); public function eat(); } class Robot implements Worker { public function work() { echo "機器人工作"; } public function eat() { // 機器人不會吃飯 throw new Exception("機器人不會吃飯"); } } ~~~ ### ? 遵守示例: ~~~ php復制編輯interface Workable { public function work(); } interface Eatable { public function eat(); } class Human implements Workable, Eatable { public function work() { echo "人工作"; } public function eat() { echo "人吃飯"; } } class Robot implements Workable { public function work() { echo "機器人工作"; } } ~~~ * * * ## 六、依賴注入(DI) > 是依賴倒置原則的實現方式之一。 ### ? 常見方式: 1. **構造函數注入** 2. **Setter 方法注入** 3. **接口注入(較少用)** ### 構造函數注入示例: ~~~ php復制編輯class Logger { public function log($msg) { echo $msg; } } class OrderService { protected Logger $logger; public function __construct(Logger $logger) { $this->logger = $logger; } public function placeOrder() { $this->logger->log("下單成功"); } } ~~~
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看