Mục đích của việc mở rộng trong laravel là gì?

Một số vấn đề khi sử dụng khung là bạn bị ràng buộc với những gì công cụ của họ cung cấp và trong một số phần, bạn phải làm mọi thứ theo cách của khung - điều này còn gây tranh cãi, một số khung làm tốt hơn và tệ nhất. Và nếu bạn muốn mở rộng một cái gì đó, bạn sẽ thay đổi giữa hai giải pháp. tạo phương thức hoặc Lớp trợ giúp của riêng bạn ở đâu đó hoặc mở rộng công cụ và ghi đè lên nó khi ứng dụng của bạn khởi động

Tùy chọn cuối cùng, mở rộng một lớp với các phương thức mới của riêng bạn, là một điều rất rắc rối, vì bạn không chỉ yêu cầu khung tải công cụ của mình thay vì mặc định, mà còn phải chú ý đến các bản cập nhật, vì một công cụ mới

Nếu có một cách dễ dàng để thêm phương thức tùy chỉnh của riêng bạn vào Lớp…

…đợi đã. Có. Và được gọi là Macro

Macro là cái quái gì vậy?

Macro, như Laravel gọi chúng, là một cách đưa phương thức có thể gọi của riêng bạn vào một Lớp. Nó đã có từ Laravel 4. 2, vì vậy nó không phải là một cái gì đó mới

Hãy nghĩ về chúng như một loại keo hoặc băng dính cho phép bạn dán một phương thức ở dạng Đóng vào Lớp bạn muốn mà không cần phải sửa đổi trực tiếp — điều hoàn toàn không được khuyến nghị khi lớp đến từ một gói bên ngoài khác — hoặc phải mở rộng . Giống như dán búa vào đèn pin để bạn có thể đóng đinh trong bóng tối mà không cần phải gọi nhà sản xuất để tạo ra chiếc đinh cho bạn. Và nếu bạn mua một mô hình cập nhật mới, băng và đèn pin vẫn có thể hoạt động

Như bạn có thể đoán, Macro là phụ gia. Bạn không thể sử dụng Macro để xóa phương thức hoặc ghi đè hoàn toàn phương thức. Nếu bạn cần ghi đè một phương thức, bạn chết tiệt. mở rộng lớp học và làm những gì bạn phải

Macro không được ghi lại, ngoại trừ trên một số lớp có thể chứng minh là hữu ích như và. Xem xét trường hợp sử dụng, hoàn toàn ổn nếu không ghi lại chúng, nhưng bạn nhất định phải tìm kiếm chúng [sẽ nói thêm về điều đó sau]

Các chức năng là huyền diệu

  • Bạn có thể sử dụng phương thức
    class ToBeMacroable
    {
    use Macroable {
    __call as macroCall,
    }
    // ...
    }
    5 trên Lớp bạn muốn mở rộng hoặc thông qua Mặt tiền của nó, với tên của phương thức mới và
    class ToBeMacroable
    {
    use Macroable {
    __call as macroCall,
    }
    // ...
    }
    6 để bao gồm
  • Phương thức được lưu bên trong một mảng tĩnh
  • Khi bạn gọi Macro mà bạn đã đăng ký trong Lớp, nó sẽ liên kết
    class ToBeMacroable
    {
    use Macroable {
    __call as macroCall,
    }
    // ...
    }
    7 với Đóng mà bạn đã đăng ký và thực thi mã, điều này sẽ phụ thuộc vào việc gọi là tĩnh hay động

Ví dụ: nếu bạn sử dụng

class ToBeMacroable
{
use Macroable {
__call as macroCall,
}
// ...
}
7 bên trong Closure của mình, thì nó sẽ không tham chiếu đến lớp nơi nó được khai báo, mà là lớp bạn đang mở rộng. Nếu bạn đang mở rộng lớp Chế độ xem, thì
class ToBeMacroable
{
use Macroable {
__call as macroCall,
}
// ...
}
7 sẽ chỉ tham chiếu đến trường hợp đó

Chủ Đề