• fans
  • 1036 reader
  • followers
Có 18 bài viết trong series PHP căn bảnHiển thị

Lập trình hướng đối tượng được ghi tắt là OOP (object-oriented programming). Là một phuơng hướng lập trình tách biệt so với kiểu cổ điển. Sử dụng đối tượng để lập trình nên những chuỗi tuơng tác. OOP giúp cho các lập trình viên có thể tiết kiệm nhiều thời gian hơn so với cách viết cổ điển.

Có thể hiểu cách lập trình OOP và bạn phải xây dựng được một loại khuôn mẫu cho sản phẩm của bạn. Sau đó việc cần làm của bạn là đổ nguyên liệu vào khuôn và đúc thành sản phẩm. OOP chính là cái khuôn đó.

Trong bài hôm nay chúng ta sẽ đi tìm hiểu về lập trình hướng đối tượng trong PHP. Dưới đây là mô hình Hướng đối tượng cơ bản của một Page khi truy xuất CSDL bằng OOP

Như vậy ta thấy được, trong mô hình trên, các thông tin từ Browser sau khi được trang PHP tiếp nhận. Trang PHP sẽ tiếp tục sử dụng các lớp đối tượng tuơng ứng. Khi các lớp đối tượng được gọi. Các lớp này sẽ sử dụng một lớp khác có chức năng hoàn toàn khác để bổ trợ cho chính nó. Quá trình hoạt động này sẽ đơn giản hóa, tự động hóa các thao tác làm bằng code của lập trình viên. Cái bạn cần là cho phép đối tượng đó chạy ở khu vực nào.

Trong bài này chúng ta sẽ đi qua các ví dụ đan xen trong lý thuyết để hiểu rõ hơn về các mô hình Class sẽ xây dựng.

I. Class

1. Khái niệm : Nghĩa đen là một LỚP. Ý nghĩa theo lập trình là một đối tượng cơ bản chứa tất cả các thuộc tính và phương thức của 1 đối tượng sẽ được tạo từ Class.

Để đỡ khó hiểu ta có thể xem Class kiểu như một lớp học. Trong lớp học sẽ có 2 loại phần tử. Tài sản và học sinh.

Tài sản : Là những vật dụng, dụng cụ học tập, bàn ghế, bảng, phấn ….. Là những tài sản chung của nhiều lớp, lớp nào cũng có những tài sản giống nhau như vậy. Không lớp nào có bàn mà không có ghế, hoặc không thể có 1 lớp lại có hồ bơi ở giữa lớp ^^.

2. Khai báo :

<?php
//Khai báo Class
class Name_of_Class{
      .......................
}
?>

3. Ví dụ :

<?php
//Khai báo Class Members
class Members{
     var $id = '';
     var $fullname = '';
     var $age = '';
     var $city = '';

     public function Get_Name_of_Father($id){
          ....................................
     }

     public function Set_value($id,$fullname,$age,$city){
          $this->id = $id;
          $this->fullname = $fullname;
          $this->age = $age;
          $this->city = $city;
     }
}
?>

4.Tầm vực biến trong Class : Như các bạn thấy, tại sao sau khi khai báo các Class tôi phải khai báo các biến $id, $fullname, $age …. Nếu không khai báo, khi sử dụng trong function Set_value, các biến nội tại như $this->id … sẽ không nhận giá trị.

Như vậy tầm vực của biến nằm tại Class Members. Nếu không khai báo các tầm vực, bạn sẽ không thể sử dụng được nó trong phạm vi các function. Điều này bạn có thể thử các biến này để nhận được thông tin lỗi.

II. Function In Class

Khái niệm về function thì ai trong ngành lập trình cũng đều biết, nói riêng PHP của chúng ta thì lại càng quan trọng.

Vậy tầm quan trọng của function nằm chỗ nào trong khi bạn cứ phải đi khai báo function tè le hết trơn. Thực tế, khi viết các đoạn code của PHP, bạn vẫn có thể không sử dụng function. Nhưng chính các công đoạn quá nhiều trong lập trình web gây nảy sinh 1 vấn đề : “Code quá nhiều những đoạn code giống nhau. Có quá nhiều những đoạn code giống nhau nằm trong trang PHP”. Chính điều này làm cho trang PHP trở nên nặng nề hơn về mặt code và mặt dung lượng file.

Tôi có một ví dụ thực tế về bài toán cộng trừ nhân chia. Với một phép cộng, nếu tôi làm 1 phép tính thì đã chẳng có chuyện gì phải nói. Nhưng nếu tôi làm khoảng 100.000 phép tính và phải ngồi code từng dòng thì e rằng tôi sẽ chết trước khi code xong các phép tính này. Nhưng việc đó sẽ được đơn giản hóa với Function và sử dụng một vòng lặp trong function đó. Lúc này điều đơn giản tôi cần là nhập số đầu, số cuối và bấm kết quả mà thôi. Nếu tôi tiếp tục tính một dãy những con số khác, thì lúc đó function sẽ đảm nhiệm chạy lại các đoạn code của tôi đã code mà không cần tôi phải thao tác ghi lại code cho phù hợp.

Ví như một ca sĩ, phục vụ cho nhiều người nghe, nếu mỗi người muốn nghe họ phải hát lại 1 lần. Thì tôi tin người ca sĩ đó sẽ chết sớm hơn tuổi thọ rất nhiều :)) . Chính vì điều đó, Radio, máy hát, máy Mp3, thiết bị thu âm, thiết bị phát âm thanh ra đời. Nhằm để tạo ra đựoc loại FUNCTION nào có thể lặp bất cứ bài hát nào mặc dù chỉ hát một lần.

Phù vậy là đã nói xong những điều tàm xàm phía trên :)) . Đùa chút thôi, như vậy qua ví dụ tôi đã giới thiệu được cho bạn hiểu tầm quan trọng của function trong Class.

Phân loại Function

a. Có giá trị trả về : Function chịu trách nhiệm xử lý dữ liệu và trả lại dữ liệu cho Process đang chờ đợi để lấy kết quả.

<?php
class member{
    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);
            return $row['m_id'];
        }
    }
}
?>

Như vậy tại một trang xử lý ta dễ dàng lấy được id của thành viên qua cấu trúc đã tạo cho function như sau :

<?php
    $mem = new member();
    $id = $mem->Get_member_id('clackken');
    echo $id;
?>

Khi đó ta sẽ có được id của username “clackken” một cách dễ dàng thông qua function.

b. Không có giá trị trả về : Lúc này function sẽ không trả lại giá trị cho biến khi được gọi. Chúng ta cùng xét lại ví dụ trên với cách viết khác một chút, chúng ta sẽ sử dụng id là một tài sản của Class.

<?php
class member{
    var $id="";
    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'];
        }
    }
}
?>

Khi đó ta sẽ lấy giá trị trực tiếp từ Class, vì id khi này là một tài sản riêng của Class.

<?php
    $mem = new member();
    $mem->Get_member_id('clackken');
    echo $mem->id;
?>

Qua 2 ví dụ trên, để bạn có thể hiểu hơn về phương thức của Class và function. Bạn có thể đăng ký giá trị là tài sản của Class hoặc có thể trực tiếp trả về cho biến tại trang sử dụng Class thông qua keyword return.

III. Class in Class

Đây là một khái niệm mà với những bạn mới đến với lập trình hướng đối tượng sẽ bỡ ngỡ. Khi bạn chỉ hiểu gói gọn rằng Class chỉ là phương thức thì khi đó bạn chưa thể tùy biến lồng các Class trong các Class khác để cùng nhau xử lý dữ liệu.

Ví dụ sau sẽ mô tả rõ ràng điều này. Giả sử ta có 2 Class xử lý các vấn đề riêng biệt. 1 Class xử lý về thành viên, một Class xử lý về Order. Khi Order cần thông tin của thành viên để thêm vào CSDL. Lúc này ta sẽ không thực hiện đơn phương thức này nữa. Mà sẽ sử dụng Class Member như là một phương tiện.

<?php
class member{
    var $id="";
    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'];
        }
    }
}

$mem = new member();

class order{
    function Insert_order($username,$id_pro,$q_tity){
        global $mem;
        $mem->Get_member_id($username);
        $sql = mysql_query('INSERT INTO tbl_orders(u_id,p_id,q_tity) VALUES($mem->id,$id_pro,$q_tity));
        if(isset($sql)){
           return 1;
        }else{
            return 0;
        }
    }
}

$Order = new order();
$Order->Insert_order('clackken',2,50);
?>

Như vậy ta đã sử dụng Class member một cách an toàn trong Class khác được khai báo sau.

Nhưng thực sự đây chưa phải là cách hay để thực hiện cho phương án trong Ví dụ này. Để cùng nhau hiểu hơn chúng ta sẽ tiếp tục tìm hiểu trong phần 2 của bài 13 để xem có cách nào hay hơn là lồng 2 Class cho ví dụ này không.

Kết luận phần 1

Nhưng vậy chúng ta đã cùng nhau tìm hiểu qua khá nhiều cách để truy xuất và cũng đã tập làm quen cách khai báo sử dụng Class.

Tôi định sẽ hoàn thành trong 1 phần, nhưng các kiến thức nếu nói hết sẽ dẫn đến quá dài và gây sự mệt mỏi cho người đọc. Nên tôi quyết định sẽ chia nhỏ phần này.

Mong các bạn sẽ hiểu hơn và yêu PHP hơn. Chúc các bạn học vui vẻ

Clackken Smith Website facebook twitter user_email

Bản thân tôi là một người Việt Nam, có lai Tây, Tàu gì không thì chưa biết, cứ tinh thần là Việt Nam cái đã, nơi ở thì vẫn ở Việt Nam, chưa có cơ hội đi tới biên giới nữa nói gì nước ngoài ^^. Hiện tại đang làm việc và sống ở TP. Hồ Chí Minh. Bản thân ngày xưa chẳng đụng chạm gì lập trình, chỉ là tò mò rồi nhìn ngó người ta cài đặt máy móc rồi học theo mà thôi.

  • Guest

    bài viết rất hay…

  • thienchuong1411

    Cám ơn các bài của anh rất nhiều.

  • Phạm văn sinh

    Hay quá thanks anh nhiều nha !!

  • Wind

    Mình phải khai báo global $mem; trong function Insert_order của class order mới sử dụng được các function trong class member sao???

    Mình mới học php chưa hiểu lắm ^^

    • Nguyễn Văn Sĩ

      đúng rồi, bạn phải khai báo thêm global thì biến $mem mới dùng dc trong các class khác.
      vì sao ư. trước hết bạn cần học lại phạm vi hoạt động của biến (có 3 loại biến: biến toàn cục, biến cục bộ, biến static). ở đây $mem là biến cục bộ nên khi muốn sử dụng trong các function khác ta phải khai báo thêm global ở phía trc biến.
      như vậy thôi nhỉ. chúc bạn học tốt.

  • Wind

    Bắt buộc phải khai báo global $mem; bên trong hàm rt_order của class
    orther mới sử dụng được tất cả các function trong class member sao?

    Mình mới học nên ko hiểu ?

  • http://www.facebook.com/steven.maison.10 Steven Mai Sơn

    Lập trình hướng đối tượng php

  • http://www.daotaolaixehanoi.com/sat_hach_ly_thuyet_online/index.php dao tao lai xe ha noi gia re

    minh cung code theo kieu ga thoi, chu thu lam OOP vi thay kho hieu. qua bai nay cung thay nen lam oop cho chuyen nghiep

  • Triệu

    hay lắm anh ơi

  • hieu_iloveyou90@yahpo.com

    Quá Tuyệt anh ạ ! Mong trang web này phát tiển hơn nữa ! @@

  • Long Gia Huy

    Trước học hướng đối tượng rồi, giờ xem lại bài này đơn gian lại dễ hiểu quá.
    Cảm ơn anh nhiều :x

  • cuongpcc

    Chào anh demon em đang học về web và đang học đến phần phân trang cho bài viết.Và em thấy phần này khó hiểu quá. Anh có thể làm 1 Tút về phân trang cho bài viết khi bài viết đó quá dài được ko anh? Phân trang cho bài viết nhé anh chứ không phải là phân trang cho các dòng dữ liệu đâu ạ. Em ví dụ như 1 bài viết quá dài và em muốn nó ngắt thành nhiều trang để cho nó ngắn bớt.Em thấy ở trong izwebz cũng có phân trang nhưng mà là phân trang cho các dòng dữ liệu cái nè thì em làm được rùi.Mong anh giúp đỡ

    • ngoc

      neu voi cai nay thi ban dung jquery lam de nhu an chao’ ay ma :)

  • misssiko

    Phân loại function …ex b. có giá trị trã về mà

  • http://chuacóanhoi dangkhjn

    chào anh DW!bài của anh rất hay!nhưng em học asp là chính!em không rành về php nên em không hiểu về lập trình hướng đối tượng trong php!anh có thể cho em 1 demo nhỏ cách khai báo + cách sử đụng được không(1 demo nhỏ thôi) thừ đó em cố gáng học!vì em hoc asp thi cung chua hoc mô hình 3 lop va m3c!

  • haninh

    Anh DW ơi
    Anh có thể quay video demo về OOP được ko? cái này lí thuyết khó hiểu quá .
    thanks

  • Vu nhat quang

    Quá hay luôn! E rất mong izwebz phát triển lớn mạnh hơn nữa

  • nguyenquoc

    Thật sự 1 trang web rất hay! Không biết mấy anh (hoặc bạn) đang ở VN hay bên USA? Nếu ở Việt Nam, mình có thể liên hệ trực tiếp ko? Cảm ơn nhiều!

  • http://www.tin2k5.info MrCuong

    Cám ơn anh DW. Hi vọng anh sẽ đem lại cho những người “lập trình như chúng e những bài viết hay và bổ ích hơn nữa, chúc a sớm trở lại.

  • cuong

    rất hay

  • Todung

    Cám ơn bài viết về MVC và OOP của anh C.S nhiều. Mong anh có bài hướng dẫn về Smarty sớm

  • http://www.izwebz.com huy thái

    thaks a cs nhiều nhé :D

  • http://dinhcoi.info kenichifc

    a DW a có thể mở thêm 1 Box về hỏi đáp dc ko ak ????

  • ChipLove

    Cảm ơn anh CS rất nhiều
    Chờ đợi anh ra tut tiếp theo
    Ủng hộ izwebz

  • SPSS

    Object .(bài mở đầu)
    Đấy là bài đầu tiên mình sẽ viết về oop , có lẽ mình sẽ bỏ qua phần giới thiệu chi tiết về phong cách lập trình này, vì nó đã quá nổi tiếng rồi. Những mình chỉ có thể nói ngắn gọn rằng đây là một hướng lập trình rất thuận lợi khi bảo trì hay bổ xung tính năng cho một chương trình nào đó. Các bạn hãy tự tìm hiểu them nha.
    Tất cả các nội dung mình đều dựa trên trang web PHP.net vì nó đã quá chuẩn.
    Những khái niệm đầu tiên về đối tượng. Đó là Class (khi code viết thường), class đại diện cho một đối tượng. Bên trong class là các thuộc tính (properties) và các phương thức(method) .
    Khái niệm thuộc tính (properties):
    Nếu bạn là người mới học về lập trình hướng đới tượng thì rễ hiểu nhất khi đưa ra một ví dụ này. Người yêu mình tên Hằng, rất xinh. Tất nhiên Hằng cũng là một đối tượng (các bạn hãy hiểu đối tượng là cái gì ta có thể cầm nắm, sờ được….). vậy đối tượng của tôi cần có những gì , Có tay, có chân, có mắt nai, có đôi môi hồng vô đối …những bộ phận tôi vừa liệt kê ra đó chính là thuộc tính. Trong lập trình thì nó chính là các dữ liệu để thể hiện lên một đối tượng.
    Khái niệm phương thức (method):
    Lại quay lại với em hằng của tôi, em phải có những gì để tôi yêu chứ, em biết cười, biết làm duyên, biết hôn gió …đó cũng chính là cách hiểu về phương thức trong hương đối tương . nó cũng chỉ là các function các bạn vẫn viết trước kia nhưng thay vì hồi trước các bạn viêt chỉ vì yêu cầu của bạn cần có nó thì nay hiểu thoáng ra nó chính là các chức năng, hay phương thức mà đối tượng của bạn cần có.
    Làm rõ con trỏ $this:
    Mình cũng đã theo dõi một số video jquery của anh Admin, và thấy đại ca này có sử dụng con trỏ $this và mừng là các anh em comment khí thế, mừng là các bạn đã nghe từ này rồi, chứ chưa nghe thì cũng hơi đuối nhỉ. Nó cũng đơn giản thôi, đây là bài viết ở mức độ khởi điểm nên mình cũng nói ngắn gọn là “con trỏ this thực chất là đang ám chỉ tới chính đối tượng bạn đang khai báo” nó sẽ tham chiếu (refer – rì phơ) tới các thuộc tính trong class đó. Có ngay ví dụ đây:
    so1 + $this->so2;
    echo $ketqua;
    }
    }
    $t =new Tinh();
    $t->CongHaiSo();
    ?>
    Hãy mỉm cười với đoạn code đi nào, bạn sẽ hiểu nó ngay thôi.
    Trước tiên tôi khai báo hai thuộc tính(và khởi tạo hai giá trị cho nó luôn là 5) cho đối tượng có tên là Tinh thể hiện qua đoạn code:
    public $so1=5;
    public $so2=5;

    Con trỏ $this của ta đây: $this->so1 và $this->so2
    Đoạn code này có ý rằng, tôi muốn tham chiếu tới thuộc tính của đối tượng Tinh, và tất nhiên là tôi đang thao tác code bên trong class Tinh nha.Tôi có thể thay đổi giá trị 5 của thuộc tính $so1 trong đối tượng bằng cách dùng con trỏ $this như sau.. $this ->so1 =1000 (thấy hem rễ kinh khủng luôn), cái mũi tên là kí hiệu của sự tham chiếu (nếu bạn cảm thấy mũi tên nó là cái quái gì thì có thể lấy ví dụ thế này, Bạn ăn cơm có đứa ghét bạn nó chơi bạn, nó cứ gắp cho bạn toàn miếng sương thôi, giờ bạn phải làm sao, giải pháp là bạn dùng cái gì đó để chỉ tao muốn ăn miếng đùi kia kìa, thì hành chỉ đó chính là tham chiếu, chuyên nghành gọi đó là sự tham chiếu..ok)

    Trước kia khi lập trình theo hướng viết hàm các bạn khai báo các biến rất thoải mái, nhưng trong lập trình hướng đối tượng có khác một chút, biến đó sẽ được thêm một cái gọi là quyền truy cập, đó là ở các mức:
    Public – private –protected.
    Giờ là phần quan trong khi nói đến 3 từ tiếng anh, có thể nói làm đau đầu những bạn không hay thực hành nhiều đây. Mình sẽ nói về 3 mức truy cập này:
    A quên mây cái nay hem nên nói vào lúc này vì nó lien quan tới thừa kế, sorry hen, mà thực ra nói giờ thật sự là không hay chỉ tạo sự nhồi nhét thôi, giờ các bạn hãy ok với mình là giả sử các bạn hiểu, quên 3 từ khóa đó đi, code không lỗi là được, nhưng vẫn phải ghi từ khóa public ở mỗi lần khai báo thuộc tính, hay phương thức nhé, cho quen. Giờ mình sẽ ví dụ một class đơn giản cho các bạn mới rễ hiểu:
    var;
        }
    }
    ?>

    Mình vừa tạo ra à không đúng hơn là mình vừa khai báo một đối tượng có tên là SimpleClass (một thói quen khi đặt tên class nha: các chữ đầu của mỗi chữ nên viết hoa, theo công nghệ chuẩn java). Trong đoạn code trên có từ khóa public …tạm thời các bạn hãy quên nó đi, miễn là code hem lỗi là được.
    class SimpleClass {} // khai đối tượng

    public $var = ‘a default value’; // khai báo thuộc tính cho class, các data cần cho đối tượng đó.

    public function displayVar() {
            echo $this->var;
        } // khai báo các phương thức cho đối tượng
    Một thói quen tốt trong lập trình là luôn khởi tạo cho biến, mình chưa quen PHP lắm, nhưng trong c++ luôn viết một hàm gọi là hàm constructor. Mình nói ngoài lề tí nha nhưng mình nghĩ kiến thức này cũng không thừa, trong c++ nếu bạn không định nghĩa constructor cho một đối tượng (class) thì trình biên dịch sẽ tự sinh ra một constructor mặc định(default). Và điều đó đôi khi khong hay lắm, nên khi viết bất kì một class nào mình luôn có đầy đủ các constructor cần thiêt cho nó. Nói từ nãy quên không định nghĩa constructor là gì, có thể mình vừa bị ai xù đầu cho coi. Constructor thực ra chỉ là một phương thức có chức năng khởi tạo các thuộc tính cho đối tượng mà thôi. hết
    Lấy một ví dụ nữa:
    Class EmHang{ //tạo ra đối tượng có tên là EmHang(em hằng)
    Public $tay=2; // thuộc tính của em hằng, và khởi tạo luôn
    Public $doimoi=1; // một thuộc tính nữa của em hằng
    Public function YeuToi() //không truyền tham số

    echo “tay em ôm vào tôi, môi em chạm môi tôi”;// em hằng tôi đã cài đặt cho em phương thức biết yêu tôi.
    }
    }
    Do bài này là mở màn cho những ai mới bắt đầu với oop nên thật khó để xua tan đi thói quen lập trình hàm, các bạn hãy thực hành nhiều hen. Các khái niệm mình đưa ra chắc là để cho bài đầu tiên rồi, nhất là các bạn lại đọc online nữa, nên mình sẽ đi vào code nhiều.
    Một đoạn code thú vị tiếp theo sẽ đưa các bạn về thời thơ ấu:
    Đề yêu cầu: hãy tạo ra một đối tượng có tên là Casio, có các thuộc tính là các số nguyên, hãy cài đặt cho đối tượng những phương thức, biết cộng , trừ, nhân, chia hai số nguyên. (tôi sẽ mở eclip lên và gõ cùng các bạn….)
    Ok…code nó đây:
    so1 + $this->so2;
    echo $ketqua; // hay retuen $ketqua.
    }
    public function Tru() {
    $ketqua =$this->so1 – $this->so2;
    echo $ketqua; // hay retuen $ketqua.
    }
    public function Nhan() {
    $ketqua =$this->so1 * $this->so2;
    echo $ketqua; // hay retuen $ketqua.
    }
    public function Chia() {
    $ketqua =$this->so1 / $this->so2;
    echo $ketqua; // hay retuen $ketqua.
    }
    }

    $C = new Casio();
    $C->Cong();
    echo “”;
    $C->Tru();
    echo “”;
    $C->Nhan();
    echo “”;
    $C->Chia();
    echo “”;
    ?>
    Output:
    10
    0
    25
    1

    Lúc tôi code mới nhớ ra là sử dụng con trỏ $this, mới bổ sung trên kia, nếu không bài này trở nên không tiện nghi cho các bạn mới học quá.

    Một chút gọi là làm quen với Constructor:
    Như đã nói nó sinh ra là để khởi tạo các thuộc tính của đối tượng thôi. Một số nhưng quy định cơ bản của constructor như sau:
    Tên phương thức phải trùng tên class.
    Nếu constructor không có tham số thì khi tạo đối tượng không truyền tham số
    Nếu constructor có tham số thì khi khởi tạo đối tượng phải truyền tham số tương ứng mới phát huy tác dụng
    Làm rõ 2 trong 3 điều trên:
    Tên phương thức trùng tên class:
    Code:
    so1 =10;
    $this->so2 =5;
    }
    // khai bao phuong thuc cong cho hai so nguyen
    public function Cong() {
    $ketqua =$this->so1 + $this->so2;
    echo $ketqua; // hay retuen $ketqua.
    }
    public function Tru() {
    $ketqua =$this->so1 – $this->so2;
    echo $ketqua; // hay retuen $ketqua.
    }
    public function Nhan() {
    $ketqua =$this->so1 * $this->so2;
    echo $ketqua; // hay retuen $ketqua.
    }
    public function Chia() {
    $ketqua =$this->so1 / $this->so2;
    echo $ketqua; // hay retuen $ketqua.
    }
    }

    $C = new Casio();
    $C->Cong();
    echo “”;
    $C->Tru();
    echo “”;
    $C->Nhan();
    echo “”;
    $C->Chia();
    echo “”;
    ?>
    Out put:
    15
    5
    50
    2
    Nếu không khai báo trùng tên class mà lại khởi tạo đối tượng xem nó ra gì , tất nhiên nó chỉ coi đó là một method bình thường của một đối tượng thôi và kết quả out put sẽ là :
    10
    0
    25
    1
    Các bạn thấy không, nó sẽ lấy các giá trị mà ta đã khởi tạo cho nó bằng 5 như lúc đầu. nhưng nếu sửa đúng quy tắc 1 của constructor thì con trỏ $this sẽ phát huy tác dụng nó sẽ thay đổi giá trị khởi tại ban đầu. ok (lập trình là phải thử)
    Làm rõ quy tắc 3: Nếu constructor có tham số thì khi tạo đối tượng không truyền tham số mới có tác dụng.
    Mình sửa lại đoạn code của constructor ở ví dụ trên như sau:
    so1 =10;
    $this->so2 =5;
    }*/
    //phương thức này đã được sửa
    public function Casio($s1, $s2){
    $this->so1 =$s1;
    $this->so2 =$s2;
    }
    // khai bao phuong thuc cong cho hai so nguyen
    public function Cong() {
    $ketqua =$this->so1 + $this->so2;
    echo $ketqua; // hay retuen $ketqua.
    }
    public function Tru() {
    $ketqua =$this->so1 – $this->so2;
    echo $ketqua; // hay retuen $ketqua.
    }
    public function Nhan() {
    $ketqua =$this->so1 * $this->so2;
    echo $ketqua; // hay retuen $ketqua.
    }
    public function Chia() {
    $ketqua =$this->so1 / $this->so2;
    echo $ketqua; // hay retuen $ketqua.
    }
    }
    /*mình truyền vào hai tham số cho đối tượng, và do constructor của mình khởi tạo có tham số nên khi khởi tạo đối tượng như vậy, các phép tính sẽ đươc thao tác trên hai số là 12 và 59*/

    $C = new Casio(12, 59);
    $C->Cong();
    echo “”;
    $C->Tru();
    echo “”;
    $C->Nhan();
    echo “”;
    $C->Chia();
    echo “”;
    ?>
    Giờ mình thử làm điều này, mình viết phương thức constructor có truyền tham số, nhưng khi mình khởi tạo ra đối tượng lại không có tham số truyền vào xem nó ra gì hen:
    public function Casio($s1, $s2){
    $this->so1 =$s1;
    $this->so2 =$s2;
    }
    Và $C = new Casio();
    Oái:
    Warning: Missing argument 1 for Casio::Casio(), called in D:\progaming_WEB\wamp\www\MLS\object1.php on line 35 and defined in D:\progaming_WEB\wamp\www\MLS\object1.php on line 12

    Warning: Missing argument 2 for Casio::Casio(), called in D:\progaming_WEB\wamp\www\MLS\object1.php on line 35 and defined in D:\progaming_WEB\wamp\www\MLS\object1.php on line 12

    Notice: Undefined variable: s1 in D:\progaming_WEB\wamp\www\MLS\object1.php on line 13

    Notice: Undefined variable: s2 in D:\progaming_WEB\wamp\www\MLS\object1.php on line 14
    0
    0
    0

    Warning: Division by zero in D:\progaming_WEB\wamp\www\MLS\object1.php on line 30
    Lỗi đó các bạn, nhớ kĩ điều này hen.
    Còn nguyên tắc 2 mình để các bạn tự sử hen. Xem nó có ra cái gì hen, rồi comment ở dưới.
    Chắc có lẽ mở màn chỉ vậy thôi. Mình sẽ trở lại sau. Good luck !!!

    • Todung

      Tôi không sợ kẻ biết đá 1000 kiểu mà chỉ sợ kẻ đá 1 kiểu nhưng 1000 lần

  • http://tintucthoitrang.net JummyDang

    hihi . anh Clackken làm cai tút phần 2 đi , chờ bữa giờ lâu quá ah ^^

  • tri nguyen

    Thế từ nay không còn video nữa hả anh CS ơi

    • http://muagibando.com Clackken Smith

      Không là không thế nào ! vẫn có chứ, nhưng phần này cần phải học kiến thức thì mới làm được. Ko phải cái gì cũng diễn tả được bằng Video ^^

      • tri nguyen

        Oh ,vậy mà em cứ tưởng vĩnh bịt video goy` chứ……….thanks anh nhiều

      • http://no-website mr.brother

        trong ảnh là anh clackken à, nghe giọng thấy anh gầy hơn nhiều
        thank vì những bài viết của anh

  • thinking in OOP

    ừa, đợi tut của clacken tiếp vậy, cái này cũng hay đấy … các bạn nhớ tìm hiểu thêm nha, ở php.net là khá đầy đủ. Mình hok theo php nhưng một ngôn ngữ khá phổ biến này đâm ra cũng phải biết tí.

  • thinking in OOP

    Thực ra để học OOP thì tất cả các sinh viên đều phải trải qua một thời gian tuơng đối để thay đổi cách tư duy, mình thấy trong bài này nếu là bài mở đầu thì hơi bị ác mộng cho những ai mới tiếp cận . Các bạn cần phải hiểu đối tượng là gì, nó khác với hướng lập trình theo hướng thủ tục như thế nào … bước đầu hãy tìm hiểu các khái niệm đó, tiếp đến là thực hành hiện thực một số phân tích của bạn vào code (hãy nhớ code thật nhiều), các từ khóa trong hướng đối tượng,như trong bài này tác giả có đề cấp đến con trở this, các bạn phải tìm hiểu nó là gì mở rộng ra hãy tìm các từ khóa tuơng tự để truy cập các biến. ui tra nói ra thì thật là nhiều, ước mở của tác giả này lúc nãy đọc là nâng cấp kĩ thuật lập trình của các bạn trẻ sau này như vậy phải làm video rồi. Đóng góp cho chót nhé (nếu bận thì làm theo kiểu bận). Mình lâu không vào trang này rồi nhưng nếu anh em có gì cần hỗ trợ về OOP thì cứ comment ở dưới nhé. Mình sẽ hỗ trợ các bạn. Lúc rảnh thì chỉ thích bàn về cái này thôi. nhớ học kì trước mình có một kinh nghiệm là để học tốt OOP các bạn hãy tập phân tích một game bất kì, trong game các bạn sẽ thấy hướng đối tượng được dùng rất hay. Nhớ nhé, hẹn gặp lại (OOP khá hấp dẫn đấy – phân tích các phưong thức của đối tượng mà lớp mình oánh nộn nuôn — hihi)

    • http://muagibando.com Clackken Smith

      @thinking : Đồng chí cứ bình tĩnh, tôi đã kết thúc phần này đâu nào. Mọi người còn chưa hiểu về phương thức cách khai báo thì đồng chí nói hướng đối tượng là hướng cái gì ?.

      Tôi còn chưa nhắc đến đối tượng mà ^^. Đối tượng phải được nêu nhưng nêu khi bạn đã hiểu được hoàn cảnh của đối tượng. ^^

      Theo dõi các Tuts sau của tôi để củng cố lại lời nói của bạn nhé.

      • http://levinh.net levinh.net

        Anh ơi! trong video hướng dẫn anh nói chậm tí nha, Anh nói chậm thì thế giới này vẫn hòa bình mà, hihihihihi, anh nói nhanh quá.

        • http://muagibando.com Clackken Smith

          Chú mày vẫn ổn, thế giới vẫn ổn, nhưng mà anh chết :). Chú mày nếu thấy nhanh vẫn có thể quay lại và nghe lại mà, nghe 1 lần ko hết nghe 2 lần, nghe khi nào mà nghe hết thì thôi ^^. Cái tiện của Video chỉ có thế ^^

        • minhltnt

          người ta bỏ công ra làm video cho bạn xem ,vậy mà hok biết xử lý video thế nào cho xứng đáng công của người ta.Video này người ta nói chậm nhất rầu đó,níu nhanh down zề xem , rồi tùy chỉnh tốc độ video .Đọc mấy comment dỡ hơi nên bức xúc có gì mong pà kon và izwebz.com thông cảm giùm . Thanks sharing TUT ,helpful to everyone

    • http://quethang@gmail.com quế thắng

      chào anh !em là người mới học oop ,thấy khó quá ,đọc vào mà không hiể gì nhiều,anh có thề dúp em đc ko vậy?
      ở trên mạng rất nhiều tài liệu .em đọc mà ko hiểu gì
      anh có cách học nào nhanh hiểu và nắm bắt nhanh về oop đc ko ah
      em cảm ơn anh trước nhé

  • http://dalatmovies.net/movies dalatmovies.net

    well. cảm ơn DW nha. Đang chờ DW làm video template en

  • Mưa tháng 7

    vẫn thích video hơn, chắc là quen mất rồi, chuẩn bị tinh thần học bài 2 thoai ^ ^

  • http://levinh.net levinh.net

    Cám ơn anh, em đang cần

Newbie

Các series nên xem trên izwebz cho newbie

Khi vào izwebz chắc nhiều bạn cho rằng các bài viết trên izwebz đều không có hệ thống gì cả? Thực chất, các bài biết đều đi theo một series của riêng nó, ví dụ như PHP, HTML & CSS, PSD2HTML, Photoshop, illustrator,… Trong bài viết này, mình sẽ tổng hợp lại các series bài viết cần thiết cho một newbie.

Izwebz facebook group

Social connect

Recent Comments

Archives