1. Xin lưu Ý! Các thành viên vui lòng kiểm tra lại bài trùng lặp của mình và xóa chúng ngay khi đó. (Mỗi thành viên hãy dành 5 phút thời gian của mình để kiểm tra lại các lỗi đăng bài trùng lặp trước đây và xóa chúng khỏi diễn đàn). BQT xin được gửi lời cám ơn trân thành tới các thành viên!

Toàn Quốc Những phương thức magic trong hướng đối tượng PHP nghĩa là gì & có chức năng gì ?

Thảo luận trong 'Linh Tinh' bắt đầu bởi vuthaiquang25, 13/7/16.

Lượt xem: 13

  1. vuthaiquang25

    vuthaiquang25 Thành Viên Mới

    Tham gia:
    28/12/15
    Bài viết:
    140
    Được thích:
    0
    Tín dụng:
    16
    Giới tính:
    Nam
    Ở bài trước, các bạn đã cùng nhau làm quen về tầm vực của tính chất và phương trong hướng đối tượng PHP, trong bài viết hôm nay, mình sẽ nói tiếp về một phần cũng rất quan trọng trong lập trình PHP, đó là những phương thức magic
    1 . Những phương thức magic trong PHP


    Nhằm giúp sử dụng hiệu quả những object trong hướng đối tượng, PHP phân phối cho developer phương thức magic.Phương thức magic là những phương thức được đặt tên với kí tự khác lạ, khởi đầu với dấu 2 gạch dưới. Khi một phương thức được đặt tên với dấu 2 gạch dưới, điều đó là dấu hiệu để PHP nhận mặt đây là phương thức magic, và nó sẽ kích hoạt những tính năng khác lạ của loại phương thức này. Nghe thì có vẻ cao quý , nhưng thực chất thì nó khá dễ , nó chỉ thuần tuý là các hàm được bề ngoài sẵn, nhằm mục đích thực hiện một tác vụ nào đó bổ ích cho lập trình. Nói thì dòng dài, thôi thì trăm nghe ko bằng mắt thấy, ta vào luôn chủ đề chính cho dễ dàng hiểu :)
    Đọc thêm : One step to quickly convert your Magento store into magento marketplace in minutes within one best cost & our quality support service! incredibly compatible with Magento 2
    a ) Phương thức magic __contruct

    Đây được gọi là một contructor, nó là một phương thức magic, luôn được gọi trước nhất khi một đối tượng được khởi tạo.
    Nói lại lần nữa, cũng như những phương thức thông thường khác, chỉ có điều nó là được gọi trước hết thôi, tất cả chỉ có thể.
    Vậy thì ứng dụng của hàm contructor là gì? bởi vì nó là phương thức được gọi trước tiên, nên thường được vận dụng theo mong muốn của nhà tăng trưởng
    để 1 đoạn mã nào đó được khởi chạy trước tiên như các hàm kết nối database, hàm gọi các model, view, controller trong MVC, vân vân và vân vân
    Giờ thì mình nêu một thí dụ về hàm khởi tạo contructor như sau :
    <?php
    // thiết kế lớp Animal
    class Animal

    // khái niệm phương thức magic contructor
    public function __construct()

    echo "Tôi là phương thức contructor nè @@";
    // Khởi tạo đối tượng Animal
    $animal = new Animal;

    ?>
    Thực thi đoạn code trên sẽ xuất ra màng hình dòng chữ : “Tôi là phương thức contructor nè @@”. Wow, ảo diệu ko Anh chị ? vì sao chỉ cần khởi tạo phương thức, chưa thực hành truy xuất một action nào cả mà đã xuất ra màng hình rồi? thuận tiện bởi vì đây chính là phương thức luôn luôn được gọi trước nhất khi khởi tạo object. Vậy thì một câu hỏi khác là giờ mình muốn khởi tạo một đối tượng với những tính chất được truyền vào thì sao? Chúng ta có thể làm như sau :
    <?php
    // bề ngoài lớp Animal với 2 tính chất là height và weight
    class Animal

    public $height;
    public $weight;
    // định nghĩa phương thức magic contructor
    public function __construct($height,$weight)

    echo "Tôi là phương thức contructor nè @@";
    $this->height = $height;
    $this->weight = $weight;
    // Khởi tạo đối tượng Animal với 2 thuộc tính chiều cao và cân nặng
    $animal = new Animal(2,100);

    // Truy xuất thuộc tính là chiều cao và cân nặng
    // xuất ra ngoài trình ưng chuẩn web chiều cao và cân nặng
    echo "Chiều cao là: ".$animal -> height;

    echo "<br />";
    echo "Cân nặng là: "$animal -> weight;
    ?>
    b) Phương thức magic __destruct

    Trái ngược với phương thức __contruct, phương thức __destruct được gọi là hàm hủy, sẽ được gọi sau hết , nhằm một đích để hủy đi một tác vụ nào đó, chả hạn như đóng kết nối cơ sở dữ liệu. ví dụ minh họa dưới đây giúp Anh chị em hiểu rõ hơn về hàm __destruct.
    <?php
    class Animal
    public $height;
    public $weight;
    // khái niệm phương thức magic contructor
    public function __construct($height,$weight)

    echo "Tôi là phương thức contructor nè @@ <br />";
    $this->height = $height;
    $this->weight = $weight;
    public function __destruct()
    echo "Tôi là phương thức magic __destruct";
    // Khởi tạo đối tượng animal
    $animal = new Animal();

    ?>
    Chạy đoạn script trên, xuất ra trình ưng chuẩn 2 dòng chữ :
    Tôi là phương thc contructor n trằn @@
    Tôi là phương thc magic __destruct
    c) Phương thức magic __toString

    Điều gì sẽ xảy ra khi bạn quyết tâm dùng lệnh echo cho một class? Chắc chắn lỗi (fatal error) sẽ xảy ra. nhưng mà với phương thức magic__toString của OOP, bạn có thể echo một class ra dễ . Phương thức này được khai báo để ghi đè lên hành vi của một đối tượng và ép nó phải xuất ra một chuỗi khi có lệnh echo.
    <?php
    class Animal
    $weight = 100;
    public function __construct($weight)
    $this->weight = $weight;
    public function __toString()
    return $this->weight;
    $animal = new Animal;
    echo $animal;// xuất ra màng hình số 100
    ?>
    Vậy một câu hỏi đặt ra là vì sao phải sử dụng hàm __toString(), trong khi chúng ta có thể lấy đối tượng và trỏ tới một phương thức nào đó ? Vấn đề chính là ở đây, thay vì khi bạn muốn xem một cái output đầu ra của một phương thức trong class, bạn phải khỏi tạo một đối tượng, rồi tiêu dùng con trỏ -> để truy xuất phương thức, thì với các developer hơi “lazy”, họ muốn output đầu ra nhanh để debug hay thực hành một ý đồ nào đó, chỉ việc echo đối tượng đó ra là xong. tiêu chí của hàm __toString chỉ có thế. Cuộc sống vốn dễ , đừng khiến nó khó hơn. (tựa đề của một clip khá hay). Sẵn tiện share link luôn , bạn nào nhàn rỗi thì coi cho zui. ngoài ra, còn toàn bộ hàm magic khác, Cả nhà có thể tự mày mò và nghiên cứu ở đây :php .net