Series Video] Cơ Bản Về PHP Bài Bài 13 : Lập trình hướng đối tượng (OOP)(2)

Thảo luận trong '6. PHP & MySQL' bắt đầu bởi Cotdien, 27 Tháng mười 2015.

  1. Cotdien

    Cotdien I'M NOTHING Staff Member

    Tham gia ngày:
    25 Tháng sáu 2013
    Bài viết:
    407
    Đã được thích:
    1
    Điểm thành tích:
    18
    - #Clackken Smith
    Lại tiếp tục với 1 phần lý thuyết nữa, để hiểu hơn về đối tượng và cả cách thức để hướng đối tượng. Như các bạn đã hỏi trong video trước, tại sao lại nói về Class như vậy, vậy có phải là quá nâng cao không ?, có phải cưỡi ngựa xem hoa không ? tại sao không chỉ luôn cái gì là hướng đối tượng, và đối tượng ở đâu ?.

    Bài hôm nay sẽ phần nào làm rõ các yếu tố đó. Tuy 2 phần đầu này chỉ là lý thuyết, nhưng nó sẽ rất cần cho Video sắp đến trong phần 3 bài 13 này.

    Class Kế thừa Class
    Thế nào là kế thừa ? Kế thừa tức là thừa hưởng tất cả những gì có trong Class mà nó kế thừa.

    Ví dụ :
    PHP:
    <?php
    //Khai báo Class Members
    class Members{
    var 
    $id '';
    var 
    $fullname '';
    var 
    $age '';
    var 
    $city '';

    function 
    Get_member_id($username){
    $sql mysql_query('SELECT m_id FROM tbl_members WHERE username="'.$username.'"');
    if(isset(
    $sql) AND mysql_num_rows($sql)>0){
    $row mysql_fetch_assoc($sql);
    $this->id $row['m_id'];
    }
    }

    function 
    Set_value($fullname,$age,$city){
    $this->fullname $fullname;
    $this->age $age;
    $this->city $city;
    }
    }

    //Khai báo Class Info_members
    class Info_members extends Members{
    function 
    Get_name_from_id($id){
    $sql mysql_query('SELECT m_name FROM tbl_members WHERE m_id="'.$id.'"');
    if(isset(
    $sql) AND mysql_num_rows($sql)>0){
    $row mysql_fetch_assoc($sql);
    return 
    $row['m_name'];
    }
    }
    }

    //Như vậy ta thấy Class Info_members chỉ có 1 function Get_name_from_id và nó thừa hưởng mọi function khác từ Members

    //Khai báo Class và gọi giá trị
    $info = new Info_members();
    $info->Get_member_id('Clackken');//function này nó được kế thừa từ Class Members
    $name $info->Get_name_from_id($info->id);
    echo 
    $name;

    ?>
    - Vậy khi xuất ra giá trị. tên được trả về sẽ là Clackken. Như vậy mặc dù không khai báo function Get_member_id trong Class Info_members, nhưng nó được thừa hưởng từ chính Class Members và vẫn có thể gọi được hàm này.

    Định nghĩa Constructors
    Constructors là gì ? Khi bạn khởi tạo một đối tượng nào đó từ Class, nếu bạn không khai báo phương thức thì các Function trong Class đó sẽ được triệu gọi khi bạn cần.

    Nhưng cũng với Class đó, bạn muốn khi người ta gọi Class bắt buộc phải truyền 1 thông số tối thiểu nào đó để thực hiện các phuơng thức của bạn, Constructors đảm nhiệm tốt vấn đề này.

    Cách khai báo thì khá đơn giản, bạn vẫn khai báo function như bình thường. Điểm khác biệt ở đây là tên của function này. Đầu tiên bạn phải sử dụng 2 tiếp đầu tố liên tục : __ và tiếp theo phải chính xác là từ này : construct. Như vậy đầy đủ là function __construct($giatri){}

    Ví dụ :
    PHP:
    <?php
    //Khai báo Class Members
    class Members{
    var 
    $id '';
    var 
    $fullname '';
    var 
    $age '';
    var 
    $city '';
    // Đây chính là phương thức Construct
    function __construct($username){
    $this->Get_member_id($username);
    }

    function 
    Get_member_id($username){
    $sql mysql_query('SELECT m_id FROM tbl_members WHERE username="'.$username.'"');
    if(isset(
    $sql) AND mysql_num_rows($sql)>0){
    $row mysql_fetch_assoc($sql);
    $this->id $row['m_id'];
    }
    }

    function 
    Set_value($fullname,$age,$city){
    $this->fullname $fullname;
    $this->age $age;
    $this->city $city;
    }
    }


    //Khai báo Class và gọi giá trị
    $info = new Info_members('Clackken');//bắt buộc khi khai báo Class bạn phải nhập giá trị của username.
    echo $info->id;//Khi đó ta sẽ có giá trị id, bởi vì construct đã gọi Get_member_id và gán giá trị,

    ?>
    Hạn Chế Quyền Truy Cập Tài Sản.
    Đôi lúc, trong lớp của bạn, có nhiều cái bàn và ghế có thể cho mượn, nhưng không ai lại sang lớp bạn để mượn bàn ghế giáo viên và để giáo viên của bạn đứng mà dạy. Đó chính là tài sản bị hạn chế, nó không được cho mượn hoặc dùng chung cho nhiều lớp.

    Đối với biến giá trị hoặc Function trong Class cũng vậy nếu bạn không muốn chia sẻ nó, bạn hoàn toàn có thể hạn chế khả năng chia sẻ của nó.

    Các cấp hạn chế có 3 cấp bao gồm :

    • Public : Chia sẻ hoàn toàn, các giá trị của nó được sử dụng trong phạm vi Class, trong phạm vi Class thừa hưởng và kể cả phạm vi ngoài Class đã khai báo nó.
    • Protected : Chia sẻ trong phạm vi Class và trong phạm vi các Class được thừa hưởng từ Class đã khai báo.
    • Private : Chỉ cho phép chia sẻ trong phạm vi Class đã khai báo nó.
    Ví dụ :
    PHP:
    <?php
    //Khai báo Class Members
    class Members{
    var 
    $id '';
    public 
    $fullname 'Clackken';
    private 
    $age '18';
    protected 
    $city 'Ho Chi Minh';
    var 
    $info='';
    function 
    show_value(){
    $this->info  $this->fullname.'|'.$this->age.'|'.$this->city;
    }
    }

    Class 
    Show_info extends Members{
    var 
    $fname $this->fullname;
    var 
    $ages $this->age;
    var 
    $citys $this->city//<--- câu lệnh này sẽ báo lỗi vì giá trị của nó đã bị Bảo mật
    }
    ?>
    Gọi Class ngoài vùng giá trị
    - Khai báo ngoài vùng giá trị tức là gán giá trị cho 1 Class khác từ Class hiện tại bạn đang làm việc.

    Ví dụ :
    PHP:
    <?php
    //Khai báo Class Members
    class Members{
    var 
    $fname '';
    function 
    show_value($name){
    $this->fname  $name;
    }
    }

    Class 
    Show_info extends Members{
    protected function 
    Get_info($name){
    Members::show_value($name);// Bạn đã gán giá trị cho Class Members thông qua Class này.
    }
    }
    ?>
    Hướng đối tượng
    - Sau khi đi qua mớ lằng phía trên kia chắc hẳn bạn đã bắt đầu ngán rồi nhỉ ^^. Có lẽ để bớt nhàm chán hơn, chúng ta sẽ xem các thứ đã show trên kia cái gì là hướng đối tượng, cái gì là đối tượng ?

    - Sau tất cả mớ lằng nhằng về Class trên kia. Chúng ta mới thấy rằng, việc lập trình hướng đối tượng sẽ chỉ tốt khi tư duy của bạn tốt. Nếu tư duy của bạn chưa được khai thông thì điểm chắc chắn là bạn sẽ chẳng thể nào hiểu nổi đối tượng là cái quỷ gì.
    – Tôi muốn dành phần cuối của phần 2 này này để phân tích về Đối tượng.

    + Ở đây tôi muốn nói về Class Members. Hẳn các bạn đã code khá nhiều ở nó nên cũng khá rõ ràng. Các yếu tố trong Class không chỉ sử dụng cho 1 người, 1 học sinh nào. 1 Class đó có thể sử dụng cho tất cả các học sinh có trong lớp. Điển hình tôi sẽ thử khai báo từ Class đã VD ở trên

    PHP:
    <?php
    include('member.class.php');//Giả sử các Class được khai báo trong trang này
    //Tạo thông tin nhận dạng cho đối tượng Nguyen Van A, goi tat la NA.
    $NA = new Members();
    //Tạo thông tin nhận dạng cho đối tượng Nguyen Van B, goi tat la NB.
    $NB = new Members();
    //Tạo thông tin nhận dạng cho đối tượng Nguyen Van C, goi tat la NC.
    $NC = new Members();

    // Tôi sử dụng function set_name($name) trong Class Members để khẳng định tên của từng người
    $NA->set_name('Nguyen Van A');
    $NB->set_name('Nguyen Van B');
    $NC->set_name('Nguyen Van C');

    // Show giá trị của 3 đối tượng ra màn hình
    echo 'Đối tượng A :'.$NA->fname.'<br />';
    echo 
    'Đối tượng B :'.$NB->fname.'<br />';
    echo 
    'Đối tượng C :'.$NC->fname.'<br />';

    //Output
    // Đối tựong A : Nguyen Van A
    // Đối tựong B : Nguyen Van B
    // Đối tựong C : Nguyen Van C
    ?>
    + Qua đó để thấy được rằng. Khi viết lập trình theo hướng đối tượng sẽ chỉ khai báo các phương thức 1 lần và sử dụng nó cho hàng ngàn đối tượng khác nhau. Khác hoàn toàn cách cổ điển rằng bạn phải làm hàng ngàn lần cho hàng ngàn đối tượng khác nhau.

    Kết Luận Lý Thuyết
    - Như vậy qua 2 phần ngắn ngủi toàn chữ này ^^. Tôi đã hướng dẫn các bạn biết cách cơ bản để khai báo và sử dụng Class. Lập trình hướng đối tượng để code cho các phuơng thức.

    - Kiến thức cơ bản là như vậy. Nhưng trong thực tế sẽ có nhiều điều xảy ra hơn là chúng ta chỉ nói lý thuyết. Phần 3 bài 13 hứa hẹn 1 video đầy đủ các Ví dụ và các kinh nghiệm sử dụng hướng đối tượng trong môi trường thực tế.
    nguồn izwebz.com​
     

Chia sẻ trang này