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!

Phần 2 : Chỉ dẫn hướng đối tượng, tầm vực là gì ?

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

Lượt xem: 26

  1. vuthaiquang25

    vuthaiquang25 Thành Viên Mới

    Tham gia:
    28/12/15
    Bài viết:
    141
    Được thích:
    0
    Tín dụng:
    16
    Giới tính:
    Nam
    Như đã có nói đến bài viết part 1 : Hướng đối tượng nghĩa là gì, bí quyết khai báo, thiết lập và truy xuất đối tượng, thuộc tính, phương thức ,hôm nay mình giới thiệu tới các bạn bài hướng dẫn mang tựa đề : “Hướng đối tượng, tầm vực của tính chất và phương thức trong PHP
    [​IMG]
    Mục tiêu của tầm vực chính là ngày càng tăng khả năng kiểm soát các đối tượng, những phương thức và thuộc tính sẽ được gán thêm các giá trị tầm vực.
    Cho phép chúng ta kiểm soát bản lĩnh truy nhập (như thế nào và ở nơi đâu) của thuộc tính và phương thức.
    Có 3 loại tầm vực của thuộc tính và phương thức đó là :public, protected và private. Ngoài ra, static cũng là một loại tầm vực của biến, cho phép chúng ta truy nhập vào thuộc tính hoặc phương thức mà ko cần khởi tạo class.
    A) tính chất và phương thức mang tầm vực public

    Với những thuộc tính và phương thức mang tầm vực public, chúng có thể được truy nhập ở bất cứ nơi đâu, bao gồm bên trong và bên ngoài class.
    Trong PHP, mặc định khi một thuộc tính hay phương thức mà không được gán tầm vực, thì mặc định thuộc tính hay phương thức đó sẽ mang tầm vực là public.
    Trong ví dụ sau
    <?php
    class KungfuClass

    public $pro1 = "Toi la thuoc tinh thu 1";
    public $pro2 = "Toi la thuoc tinh thu 2";
    public function method1()
    return "Toi la phuong thuc cua class KungfuClass !";


    $kungfuClass = new KungfuClass();
    echo $kungfuClass -> pro1; // Xuat ra trinh duyet chu "Toi la thuoc tinh thu 1"
    echo $kungfuClass -> pro2; // Xuat ra trinh duyet chu "Toi la thuoc tinh thu 2"
    echo $kungfuClass -> method1(); // Xuat ra trinh duyet chu "Toi la phuong thuc cua class KungfuClass !"
    ?>

    thuộc tính và phương thức mang tầm vực là public sẽ được truy xuất bất kì khuôn khổ nào dù là bên trong hay bên ngoài class chứa nó.
    B) thuộc tính và phương thức mang tầm vực protected Magento Marketplace

    Đối với các thuộc tính hay phương thức mang tầm vực protected, chúng chỉ có thể được truy xuất bên trong class hoặc những class kế thừa class này. Ở tỉ dụ sau:
    <?php
    class KungfuClass

    protected $pro1 = "Toi la thuoc tinh cua class KungfuClass!";

    protected function method1()
    return "Toi la phuong thuc cua class KungfuClass !";


    $kungfuClass = new KungfuClass();
    echo $kungfuClass->pro1;
    ?>

    Khi thực thi đoạn script trên, hệ thống sẽ thông báo lỗi là : Fatal error: Call mập protected method …
    Điều này có ý tức là đối với các tính chất hay phương thức mang tầm vực protected thì chúng sẽ chẳng thể được truy xuất
    tùy tiện thể bất kỳ nơi đâu mà chỉ có thể được truy xuất trong chính class hoặc class kế thừa class này.
    Sửa code lại như 2 tỉ dụ dưới đây :
    Ví du 1 :
    <?php
    class KungfuClass

    protected $pro1 = "Toi la thuoc tinh cua class KungfuClass!";

    protected function method1()
    return "Toi la phuong thuc cua class KungfuClass !";

    public function method2()
    return $this->pro1;


    $kungfuClass = new KungfuClass();
    echo $kungfuClass->method2();// Xuất ra ngoài trình duyệt dòng chữ "Toi la thuoc tinh cua class KungfuClass!"
    ?>

    Ở thí dụ 1, ta có thể truy xuất tính chất $pro1 thông qua phương thức method2, và vì method2 mang tầm vực public, nên ta có thể truy xuất phương thức này bên ngoài class, và từ đó lấy được giá trị của tính chất $pro1
    thí dụ 2 :
    <?php
    class KungfuClass

    protected $pro1 = "Toi la thuoc tinh cua class KungfuClass!";
    protected function method1()
    return "Toi la phuong thuc cua class KungfuClass !";

    public function method2()
    return $this->pro1;


    class KungfuChildClass extends KungfuClass
    public function callmethod1()
    return $this->method1();


    $kungfuChildClass = new KungfuChildClass();
    echo $kungfuChildClass->callmethod1();// Xuất ra ngoài trình duyệt dòng chữ "Toi la phuong thuc cua class KungfuClass !"
    ?>

    Ở thí dụ 2, class KungfuchildClass là lớp con kế thừa lớp cha là KungfuClass, chính vì vậy nó thống qua phương thức callmethod1 sẽ truy xuất được phương thức method1 mang tầm vực protected của lớp phụ thân mà không gặp bất kì trở lực nào, song song cũng chính version thân phương thức callmethod1 mang tầm vực là public, nên nó có thể được truy xuất bên ngoài class, và từ đó xuất ra dòng chữ “Toi la phuong thuc cua class KungfuClass !”
    C) tính chất hoặc phương thức mang tầm vực private

    Tầm vực private chính là tầm vực khó tính nhất trong 3 loại tầm vực là public, protected, private. Ví những tính chất hay phương thức mang tầm vực này chỉ có thể được truy xuất bên trong chính class chứa nó. Thậm chí những class kế thừa class này cũng chẳng thể truy xuất được.Để hiểu rõ hơn chúng ta hãy nhìn 2 thí dụ dưới đây :
    Ví du 1 :
    <?php
    class KungfuClass

    private $pro1 = "Toi la thuoc tinh cua class KungfuClass!";
    private function method1()
    return "Toi la phuong thuc cua class KungfuClass !";

    public function method2()
    return $this->pro1;


    $kungfuClass = new KungfuClass();
    echo $kungfuClass->method1();// Báo lỗi Call bự private method...
    ?>

    thí dụ 2 :
    <?php
    class KungfuClass

    private $pro1 = "Toi la thuoc tinh cua class KungfuClass!";
    private function method1()
    return "Toi la phuong thuc cua class KungfuClass !";

    public function method2()
    return $this->pro1;


    class KungfuChildClass extends KungfuClass

    public function callmethod1()
    return $this->method1;


    $kungfuChildClass = new KungfuChildClass();
    echo $kungfuChildClass->callmethod1();// tiếp tục báo lỗi Call to private method...
    ?>

    2 tỉ dụ trên đều báo lỗi liên can đến vấn đề truy xuất biến ở màn chơi private, chính vì thế để có thể truy xuất được thuộc tính hay phương thức mang tầm vực private, chúng ta chỉnh sửa đoạn code lại như sau :
    <?php
    class KungfuClass

    private $pro1 = "Toi la thuoc tinh cua class KungfuClass!";

    private function method1()
    return "Toi la phuong thuc cua class KungfuClass !";

    public function method2()
    return $this->pro1;


    $kungfuClass = new KungfuClass();
    echo $kungfuClass->method2();// Xuất ra dòng chữ "Toi la thuoc tinh cua class KungfuClass!"

    ?>

    d ) thuộc tính và phương thức static
    Từ khóa static cho phép các tính chất và phương thức có thể được truy cập mà không cần khởi tạo class. Bạn chỉ cần cung ứng theo công thức :
    Tên class + toán tử phân giải khuôn khổ “::” + tên thuộc tính hoặc phương thức​
    một trong nhiều lợi ích chính khi sử dụng thuộc tính static là chúng giữ những giá trị được lưu trữ trong suốt khoảng thời gian script tồn tại.” .
    Để giải thích về điều này, chúng ta hãy cùng nhau xem xét thí dụ dưới đây và tự ngẫm ra mục tiêu của static cho version thân mình.
    <?php

    class KungfuClass

    public $prop1 = "Toi la thuoc tinh cua class KungfuClass";

    public static $count = 0;

    public function __construct()

    echo 'Class "', __CLASS__, '" duoc khoi tao!<br />';


    public function __destruct()

    echo 'Class "', __CLASS__, '" bi huy.<br />';



    public static function addOne()

    return "Gia tri cua bien count la: " . ++self::$count . ".<br />";



    // Thuc hien vong lap while

    do

    // Goi phuong thuc addOne ma khong can khoi tao class KungfuClass
    echo KungfuClass::addOne();
    while ( KungfuClass::$count < 5 );

    ?>

    Save lại cam đoan script này và chạy trên trình duyệt web sẽ xuất hiên lần lượt những dòng chữ :
    Gia tri cua bien count la: 1.
    Gia tri cua bien count la: 2.
    Gia tri cua bien count la: 3.
    Gia tri cua bien count la: 4.
    Gia tri cua bien count la: 5.

    Vậy là xong, chúng ta đã chấm dứt bài viết thứ 2 trong chuỗi serial bài viết về lập trình hướng đối tượng. có bất kỳ thắc mắc thì hãy để lại nhận xét bên dưới nhé. Thân !