Web888.vn
  • Khám phá
  • Kiến thức công nghệ
    • Học lập trình
      • Lập trình C/C++
      • Lập trình HTML
      • Lập trình Javascript
        • ReactJS framework
        • AngularJS framework
      • Cơ sở dữ liệu
        • Micrsoft SQL Server
      • Lập trình PHP
        • Lập trình PHP cơ bản
        • Laravel Framework
    • WORDPRESS
      • WordPress cơ bản
      • WordPress nâng cao
      • Chia sẻ WordPress
    • Machine Learning
    • Marketing
      • Google Adwords
      • Facebook Ads
      • Kiến thức khác
    • Tin học văn phòng
      • Microsoft Word
      • Microsoft Excel
  • Kinh doanh online – MMO
    • Tiếp thị liên kết
    • Drop shipping
    • Google Adsense
    • Kiếm tiền youtube
    • Tiền điện tử
    • Thương mại điện tử
  • Chia sẻ IT
    • Chia sẻ phần mềm
    • Review công nghệ
    • Công cụ – tiện ích
      • Kiểm tra bàn phím online
      • Kiểm tra webcam online
  • Kỹ năng sống
Đăng nhập
  • Đăng nhập / Đăng ký

Please enter key search to display results.

Home
  • Lập trình PHP cơ bản
Method (phương thức), public,private,protected, method overriding trong hướng đối tượng PHP

Method (phương thức), public,private,protected, method overriding trong hướng đối tượng PHP

  • 17-03-2023
  • Toanngo92
  • 0 Comments

Trong thuật ngữ PHP OOP, các hàm thành viên của lớp được gọi là phương thức (method). Từ khóa function được sử dụng để khai báo các phương thức của lớp.

Mục lục

  • Gọi phương thức thành viên (calling member method)
  • Kế thừa (Inheritance)
    • Public members (thành viên công khai)
    • Private members (thành viên riêng tư)
    • Protected Members (thành viên được bảo vệ)
  • Method overriding (ghi đè phương thức)
  • Phạm vi của hàm bên trong Class
    • Nested function (hàm bên trong)

Gọi phương thức thành viên (calling member method)

OOP là một mô hình dựa trên khái niệm về các đối tượng giúp xây dựng các ứng dụng phức tạp và có thể tái sử dụng bằng cách sử dụng dữ liệu và mã. Các khái niệm hướng đối tượng chính trong PHP là class (lớp), object (đối tượng),inheritance (kế thừa), polymorphism (đa hình),overloading (nạp chồng), data abstraction (trừu tượng hóa dữ liệu), constructor (hàm khởi tạo) và destructor (hàm hủy). Một đối tượng được tạo trong PHP bằng cách sử dụng từ khóa new.

Khi các đối tượng được tạo, các biến và phương thức thành viên của lớp có thể được truy cập bằng toán tử ->. Các phương thức (hàm) thành viên có thể được truy cập để lấy thông tin về các thuộc tính của đối tượng.

OOP có một số từ khóa được gọi là access modifier (bổ từ truy cập) quyết định khả năng truy cập cho các phương thức và thuộc tính trong class. Một số từ khóa PHP đại diện cho các access modifier và được sử dụng để đặt quyền truy cập với các thành viên và class PHP của chúng. Công cụ sửa đổi truy cập PHP có thể được phân loại dựa trên ứng dụng với variable (biến – thuộc tính) và method (phương thức) và class (lớp).

ModifierMethodsVariables(properties)Classes
publicÁp dụngÁp dụngKhông áp dụng
privateÁp dụngÁp dụngKhông áp dụng
protectedÁp dụngÁp dụngKhông áp dụng
abstractÁp dụngKhông áp dụngÁp dụng
finalÁp dụngKhông áp dụngÁp dụng

Ví dụ:

class Car {
  // Properties (also known as attributes or member variables)
  private $make;
  private $model;
  private $year;

  // Constructor
  public function __construct($make, $model, $year) {
    $this->make = $make;
    $this->model = $model;
    $this->year = $year;
  }

  // Getter Methods
  public function getMake() {
    return $this->make;
  }

  public function getModel() {
    return $this->model;
  }

  public function getYear() {
    return $this->year;
  }

  // Setter Methods
  public function setMake($make) {
    $this->make = $make;
  }

  public function setModel($model) {
    $this->model = $model;
  }

  public function setYear($year) {
    $this->year = $year;
  }
}

$car = new Car("Toyota", "Camry", 2018);

echo $car->getMake();  // Output: Toyota

$car->setYear(2019);
echo $car->getYear();  // Output: 2019

Kế thừa (Inheritance)

Kế thừa là một nguyên tắc quan trọng trong OOP, vì nó cho phép một lớp sử dụng các phương thức và thuộc tính của các lớp khác. Trong lập trình, luôn có yêu cầu tạo một lớp mới với các chức năng của các lớp khác hoặc các lớp hiện có. Trong những tình huống như vậy, bạn có thể sao chép hoặc kế thừa tất cả các phương thức và thuộc tính của lớp hiện có sang một lớp khác.

Kế thừa có lợi cho khả năng sử dụng lại khi tạo nhiều lớp tương tự nhau. Thay vì tạo các lớp từ đầu, người dùng có thể xây dựng dựa trên các lớp hiện có và mở rộng chức năng của chúng. Lớp kế thừa được gọi là Lớp cha (lớp siêu hoặc lớp cơ sở) và lớp được kế thừa được gọi là Lớp con (lớp con hoặc lớp dẫn xuất). Các thuộc tính và phương thức phổ biến trong lớp cha có thể được kế thừa vào lớp con, dựa trên các access modifier (bổ từ truy cập).

Một số lưu ý khi sử dụng kế thừa:

  • Lớp con chỉ có quyền truy cập vào các phương thức và thuộc tính không riêng tư trên lớp cha
  • Các phương thức của lớp con không có sẵn cho lớp cha.
  • Các phương thức được định nghĩa trong lớp cha có thể được lớp con ghi đè bằng cách triển khai riêng.

Trong PHP, người dùng có thể sử dụng từ khóa extends để chỉ định tên của lớp cha trong khi định nghĩa lớp con. Cú pháp:

class <Child> extends class <Parent>{
// todo
}

Trong đó, Parent là một lớp hiện có.

Ví dụ:

<?php


class SinhvienObj{
    private $name;
    public $classs;
    public $birthday;
    public $gender;
    public $subject;
    // property
    // method
    // constructor => ham nay se chi khi doi tuong bat dau khoi tao
    public function __construct($name,$class,$birthday,$gender,$subject)
    {
        $this->name = $name;
        $this->classs = $class;
        $this->birthday = $birthday;
        $this->gender = $gender;
        $this->subject = $subject;
    }

    public function getName(){
        return $this->name;
    }
    public function setName($name){
        $this->name = $name;
    }
}


class SinhvienAptech extends SinhvienObj{

}

$sv = new SinhvienAptech('toan','Aptech','20/10/2000','Nam','Toan');
$sv->setMark(10);
echo $sv->getMark();

$sv2 = new SinhvienObj('toan','Aptech','20/10/2000','Nam','Toan');
$sv2->setMark(10);
echo $sv2->getMark();

Lớp con với các phương thức và thuộc tính riêng

Một lớp con có thể truy cập các thành viên non-private (không riêng tư) của lớp cha. Một lớp con có thể có các thuộc tính và phương thức thành viên riêng.

<?php


class SinhvienObj{
    private $name;
    public $classs;
    public $birthday;
    public $gender;
    public $subject;
    // property
    // method
    // constructor => ham nay se chi khi doi tuong bat dau khoi tao
    public function __construct($name,$class,$birthday,$gender,$subject)
    {
        $this->name = $name;
        $this->classs = $class;
        $this->birthday = $birthday;
        $this->gender = $gender;
        $this->subject = $subject;
    }

    public function getName(){
        return $this->name;
    }
    public function setName($name){
        $this->name = $name;
    }
}


class SinhvienAptech extends SinhvienObj{
    public $mark;

    public function getMark(){
        return $this->mark;
    }

    public function setMark($mark){
        $this->mark = $mark;
    }
}

$sv = new SinhvienAptech('toan','Aptech','20/10/2000','Nam','Toan');
echo $sv->name;

$sv2 = new SinhvienObj('toan','Aptech','20/10/2000','Nam','Toan');
echo $sv2->name;

Các thuộc tính và phương thức được định nghĩa trong lớp cha có thể được sử dụng bởi lớp con mà không cần định nghĩa lại. Ngoài ra, lớp con có thể định nghĩa thêm các phương thức và thuộc tính riêng tương tự như bất kỳ lớp nào khác. Điều này có thể thực hiện được mặc dù nó kế thừa các thuộc tính của lớp cha.

Public members (thành viên công khai)

Các lớp và các thành viên của chúng được đối xử công khai, trừ khi được chỉ định. Để hiểu rõ hơn, cách tốt nhất là chỉ định các lớp và các thành viên của chúng là công khai (public).

Bằng cách định nghĩa các lớp và các thành viên của chúng là công khai, chúng có thể được truy cập từ bất kỳ cách nào sau đây:

  • Ngoài phạm vi của một lớp.
  • Trong phạm vi của một lớp.
  • Một lớp khác trong lớp đã khai báo.

Private members (thành viên riêng tư)

Một lớp có thể được định nghĩa là private (riêng tư) hoặc protected (được bảo vệ) để giới hạn khả năng truy cập của các thành viên trong lớp. Các thành viên lớp riêng có thể được truy cập từ bên trong lớp.
Nó có nghĩa là một thành viên riêng không thể được truy cập từ bên ngoài lớp mà nó được khai báo cũng như lớp kế thừa.

Ví dụ:

// Define the base class
class Footwear {
  private $price = "We have a fixed price of 3000";

  private function show() {
    echo "This is a private method of Footwear (base class)";
  }

  public function getPrice() {
    return $this->price;
  }
}

// Define the derived class
class Sneakers extends Footwear {
  public function printPrice() {
    echo $this->getPrice();
  }
}

// Create an object of the derived class
$sneakersObj = new Sneakers();

// This will now throw an error because show() is private
$sneakersObj->show();

// This will work because printPrice() is public
$sneakersObj->printPrice();

Protected Members (thành viên được bảo vệ)

Một protected member (thành viên được bảo vệ) tương tự như private member. Các protected member có thể được truy cập từ các lớp dẫn xuất từ lớp cha. Chúng cũng có thể được truy cập trong các lớp con mà chúng được khai báo.

Ví dụ:

<?php
class Footwear{
    protected $price1 = 5000;
    protected $price2 = 15000;
    function total(){
        echo $sum = $this->price1 + $this->price2;
        echo "<br/>";
    }

 
}
class Sneakers extends Footwear{
    function printBill(){
        $tax = 100;
        echo $sub  = $this->price1 + $this->price2 + $tax;
        echo "<br/>";
    }
}

$obj = new Sneakers();
$obj->total();
$obj->printBill();
echo $obj->price1;

Trong mã trên, các biến $price1 và $price2 được khai báo với bộ xác định quyền truy cập được bảo vệ trong lớp cơ sở Footwear. Do đó, chúng chỉ có thể được truy cập trong cùng một lớp hoặc trong các lớp đang kế thừa lớp cơ sở. Chúng không thể được truy cập bên ngoài lớp dẫn xuất hoặc lớp cơ sở.

Các bổ từ truy cập private và protected thường được sử dụng để triển khai các nguyên tắc trừu tượng hóa và đóng gói trong OOP. Ví dụ: khi xác định các thư viện cài sẵn, nhà phát triển có thể muốn cấp cho người dùng một số quyền truy cập chứ không phải quyền truy cập đầy đủ. Họ có thể muốn ‘bảo vệ’ một số chức năng khỏi bị sửa đổi. Trong những trường hợp như vậy, các chỉ định này rất hữu ích.

Method overriding (ghi đè phương thức)

Ghi đè phương thức là một khái niệm OOP quan trọng trong PHP, trong đó cả lớp cha và lớp con đều có cùng tên phương thức. Mục tiêu chính là thay đổi hành vi của phương thức lớp cha.

Ghi đè phương thức hoặc chức năng được thông qua khi lớp muốn sử dụng phương thức của lớp cha theo cách khác. Phương thức được định nghĩa trong lớp cha bị ghi đè bằng một định nghĩa khác.

Ví dụ:

class Car{
    public $title;
    public function drive(){
        echo "Driving a car <br/>";
    }
}

class BMW extends Car{
    public function drive(){
        echo "Driving a BMW <br/>";
    }
}

class HondaCity extends Car{
    public function drive(){
        echo "Driving a HondaCity <br/>";
    }
}

$bmw = new BMW();
$bmw->title = "BMW 4 series (G20/G21)";
$bmw->drive();
$hondacity = new HondaCity();
$hondacity->title = "Honda City V MT";
$hondacity->drive();

Phạm vi của hàm bên trong Class

Các hàm theo mặc định là toàn cục. Sau đây là cú pháp để xác định một hàm PHP:

function funcName(){
    // todo
}

Hàm Có thể bao gồm các tham số và câu lệnh retum. Các hàm có phạm vi toàn cục và có thể được bắt đầu từ bất kỳ đâu trong chương trình. Chúng thậm chí có thể được gọi từ một instance của một class.

Nested function (hàm bên trong)

Các hàm bên trong, còn được gọi là các hàm lồng nhau, là các hàm toàn cục hoạt động giống như cách chúng được khai báo bên ngoài hàm chứa. Ví dụ: biến được xác định trong hàm là cục bộ của hàm đó. Tuy nhiên, theo quy tắc hàm toàn cục, hàm được xác định trong một hàm khác là một biến cục bộ.

function outerFunction() {
  $outerVar = "I am accessible by innerFunction.";
  
  function innerFunction() {
    $innerVar = "I am only accessible within innerFunction.";
    echo $innerVar; // This will output "I am only accessible within innerFunction." 
    echo $outerVar; // This will produce an error because $outerVar is not defined within the innerFunction's scope.
  }
  
  innerFunction();
}

Bài viết liên quan:

Kỹ thuật AJAX trong PHP
Làm việc với JSON trong PHP
Chuyển hướng trình duyệt, download file bằng HTTP Header trong PHP
Một số cải tiến mới của PHP 8
Nhận dạng trình duyệt và nền tảng trong PHP
Từ khóa final, static, overloading và magic method trong PHP
Abstract Class (lớp trừu tượng) trong PHP
Interface trong hướng đối tượng PHP
Iterable và iterator trong PHP
Namespace trong hướng đối tượng PHP
Khái niệm trait (đặc điểm) trong hướng đối tượng PHP
Khái niệm hướng đối tượng, Class, Object trong PHP

THÊM BÌNH LUẬN Cancel reply

Dịch vụ thiết kế Wesbite

NỘI DUNG MỚI CẬP NHẬT

FUNCTION (hàm) trong SQL Server

Vòng lặp và kiểm soát luồng chương trình trong PHP

Biểu thức chính quy (Regular Expression) trong PHP

Biến (Variable) trong PHP

Các kiểu dữ liệu trong PHP

Giới thiệu

web888.vn là chuyên trang chia sẻ và cập nhật tin tức công nghệ, chia sẻ kiến thức, kỹ năng. Chúng tôi rất cảm ơn và mong muốn nhận được nhiều phản hồi để có thể phục vụ quý bạn đọc tốt hơn !

Liên hệ quảng cáo: [email protected]

Kết nối với web888

© web888.vn - Tech888 Co .Ltd since 2019

Đăng nhập

Trở thành một phần của cộng đồng của chúng tôi!
Registration complete. Please check your email.
Đăng kýBạn quên mật khẩu?

Create an account

Welcome! Register for an account
The user name or email address is not correct.

Your personal data will be used to support your experience throughout this website, to manage access to your account, and for other purposes described in our privacy policy.

Registration confirmation will be emailed to you.
Log in Lost your password?

Reset password

Recover your password
Password reset email has been sent.
The email could not be sent. Possible reason: your host may have disabled the mail function.
A password will be e-mailed to you.
Log in Register
×