Hướng dẫn dùng meaning magic trong PHP
PHP Magic Methods là gì?
Bạn có lẽ đã bắt gặp một số magic methods của PHP rồi vì chúng khá là phổ biến. Tuy nhiên với một PHP developer tôi tin rằng bạn cần nắm vững các công cụ như thế khi làm việc với Object Oriented PHP. Show Nội dung chính
Nội dung chính
Nội dung chính
Nội dung chính
Bài viết hôm nay sẽ giúp bạn hiểu thêm về PHP Magic Methods Working within a context (tạm dịch: làm việc trong một ngữ cảnh)Tưởng tượng rằng chúng ta đang kéo các tweets từ Twitter API. Chúng ta lấy về một JSON payload của người dùng hiện tại và chúng ta muốn chuyển mỗi tweet vào một object để làm việc
với chúng. Dưới đây là một class
Bây giờ chúng ta đã thiết lập một bối cảnh rồi. Tôi sẽ điểm qua từng Magic Methods để cho bạn thấy được cách áp dụng của chúng trong hệ thống. Construct và DestructTrong PHP, Magic Method phổ biến nhất chính là
khi bạn tạo mới một object của Khi bạn mở rộng một object, object cha sẽ đôi khi cũng có một
Khi một object bị destroy bởi Destruct method sẽ cho phép bạn xóa sạch bất cứ thứ gì không cần thiết một lần đối với object bị destroy. Ví dụ bạn có thể ngắt kết nối tới một dịch vụ bên ngoài hoặc database:
Thành thật mà nói thì Getting và SettingKhi làm việc với objects trong PHP, bạn đôi khi muốn truy cập tới thuộc tính của object giống như:
Tuy vậy, khi các thuộc tính của một object được set
Nếu bạn không gọi
Nếu bạn cố gắng set một thuộc tính không thể truy cập, Nếu bạn muốn cho phép chức năng này trong object, có thể làm như sau:
Trên đây là hai ví dụ nói về cách get và set thuộc tính cho một object khi chúng không được set public. Việc truy cập các thuộc tính giống như vậy không phải lúc nào cũng là ý tưởng tốt. Tốt hơn cả là ta định nghĩa getter và setter methods để tạo thành một API nhất quán. Điều đó có nghĩa là nếu các thuộc tính của bạn thay đổi, bất kỳ đoạn code nào được sử dụng object này sẽ không bị lỗi ngay lập tức. Bạn cũng thường xuyên thấy Checking to see if a property is set (kiểm tra xem thuộc tính đã được set hay chưa)Nếu bạn quen thuộc với code PHP, bạn có lẽ đã gặp Nếu bạn thử dùng function này để check xem một thuộc tính có được truy cập public hay không, bạn có thể sử dụng
Như bạn có thể thấy ở trên, Unsetting a property (bỏ set một thuộc tính)Tương tự với
To String
Điều này có nghĩa là bất cứ khi nào bạn cố gắng gọi ra object như một string, như là cố gắng sử
dụng Một ví dụ cho trường hợp này đó là bất cứ khi nào bạn trả về một trong những Laravel Eloquent Models trong một controller, bạn sẽ trả về một object như Sleep và WakeupFunction serialize() là một cách thông dụng để lưu trữ một đại diện (representation) của một object. Ví dụ, nếu bạn muốn lưu một object vào trong database, đầu tiên bạn cần serialize nó, lưu trữ nó và tiếp theo khi bạn một sử dụng nó từ trong database, bạn sẽ phải unserialize nó.
Ví dụ, tưởng tượng rằng nếu khi bạn tạo mới một thực thể, chúng ta cũng cần cung cấp một cơ chế lưu trữ:
Khi chúng ta serialize tweet này, chúng ta không muốn serialize database connection bởi vì nó không liên quan trong tương lai.
Khi nó đến với unserialize object, chúng ta cần thiết lập object trong nó với đúng trạng thái. Trong ví dụ này tôi cần thiết lập lại database connection, nhwnh trong thực tế điều này có thể có nghĩa là thiết lập bất
cứ điều gì mà object cần phải nhận thức. Bạn có thể làm điều đó với
Call
CloningKhi bạn tạo một bản sao của một object trong PHP, nó vẫn liên kết tới object gốc. Điều này có nghĩa là nếu bạn tạo một thay đổi trong object gốc thì object bản sao cũng sẽ thay đổi theo:
Điều này xảy ra khi bạn cope một object trong PHP, nó là sự thông qua một tham chiếu, có nghĩa là nó vẫn duy trì một đường dẫn đến object gốc. Để giải quyết vấn đề này, chúng ta phải sử dụng từ khóa
Tuy nhiên, nếu chúng ta có những objects được inject vào trong một object khác thì những phụ thuộc đó sẽ thông qua một tham chiếu:
Để sửa vấn đề này chúng ta có thể dùng
Invoke
Trong ví dụ này, tôi có thể sử dụng Tổng kếtNhư bạn đã thấy từ mỗi method ở trên, PHP Magic Method được sử dụng để phản ứng với các sự kiện và kịch bản khác nhau mà object của bạn có thể tìm thấy trong chính nó. Mỗi magic method sẽ được kích hoạt một cách tự động, bởi vậy về bản chất, bạn chỉ cần xác định những gì nên xảy ra dưới những trường hợp như trên. Hy vọng qua các ví dụ, bạn có thể hiểu thêm về PHP magic method và hiểu thêm về những kiến thức cơ bản của PHP. |