hocvietcode.com
  • Trang chủ
  • Học lập trình
    • Lập trình C/C++
    • Lập trình HTML
    • Lập trình Javascript
      • Javascript cơ bản
      • ReactJS framework
      • AngularJS framework
      • Typescript cơ bản
      • Angular
    • Lập trình Mobile
      • Lập Trình Dart Cơ Bản
        • Dart Flutter Framework
    • Cơ sở dữ liệu
      • MySQL – MariaDB
      • Micrsoft SQL Server
      • Extensible Markup Language (XML)
      • JSON
    • Lập trình PHP
      • Lập trình PHP cơ bản
      • Laravel Framework
    • Lập trình Java
      • Java Cơ bản
    • Cấu trúc dữ liệu và giải thuật
    • Lập Trình C# Cơ Bản
    • Machine Learning
  • WORDPRESS
    • WordPress cơ bản
    • WordPress nâng cao
    • Chia sẻ WordPress
  • Kiến thức hệ thống
    • Microsoft Azure
    • Docker
    • Linux
  • Chia sẻ IT
    • Tin học văn phòng
      • Microsoft Word
      • Microsoft Excel
    • Marketing
      • Google Adwords
      • Facebook Ads
      • Kiến thức khác
    • 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
Đăng nhập
  • Đăng nhập / Đăng ký

Please enter key search to display results.

Home
  • Lập trình PHP cơ bản
Từ khóa final, static, overloading và magic method trong PHP

Từ khóa final, static, overloading và magic method trong PHP

  • 18-03-2023
  • Toanngo92
  • 0 Comments

Mục lục

  • Từ khóa final
  • Từ khóa static
  • Nạp chồng phương thức và thuộc tính (Method and Property Overloading)
    • Nạp chồng phương thức (Method Overloading)
    • Nạp chồng thuộc tính (Property Overloading)
    • Magic Methods

Từ khóa final

Từ khóa final giúp khai báo một phương thức là cuối cùng. Nó ngăn không cho một lớp bị kế thừa hoặc ghi đè. Từ khóa này khi được sử dụng với một phương thức sẽ ngăn lớp con ghi đè phương thức đó.

Ví dụ:

<?php
class Bill{
    public function check(){
      echo "check called";
    }
    final public function applytax(){
        echo "apply tax called";
    }
}

class RentBill extends Bill{
    public function check(){
       echo  "Rentbill check called";
    }
    // public function applytax(){
    //     echo "Rentbill apply tax called";
    // }
}

$rentbill = new RentBill();
$rentbill->check();
$rentbill->applytax();

Từ khóa static

Trong PHP, các thành viên tĩnh được tạo bằng từ khóa static. Các thành viên tĩnh bao gồm các phương thức có thể được truy cập mà không cần khởi tạo lớp. Tất cả các thành viên tĩnh như vậy được liên kết với lớp chứ không phải các đối tượng riêng lẻ.

Tuy nhiên, không thể truy cập một thành viên tĩnh bằng cách sử dụng một đối tượng class được khởi tạo. Toán tử phân giải phạm vi (scope resolution operator) (::) được sử dụng để truy cập các thuộc tính tĩnh. Tuy nhiên, điều tương tự không thể thực hiện được khi sử dụng toán tử đối tượng (->).

Một lớp có thể được tham chiếu bằng cách sử dụng một biến. Tuy nhiên, giá trị của biến không được là một từ khóa như self, parent, static, v.v.

Cú pháp:

<?php
class ClassName{
   public static function StaticMethodName(){
       // todo
   }
}

Để truy cập một phương thức tĩnh, hãy sử dụng tên lớp, dấu hai chấm (::) và tên phương thức.

Cú pháp:

ClassName::staticMethod();

Ví dụ:

class TestStatic{
    public static $name = "toanngo92";
    public static function getName(){
        return self::$name;
    }
}
echo TestStatic::getName();
$test = new TestStatic();
echo $test->getName();

Nạp chồng phương thức và thuộc tính (Method and Property Overloading)

Quá trình nạp chồng các thuộc tính và phương thức với các chức năng khác nhau được gọi là nạp chồng phương thức/thuộc tính tương ứng.

Nạp chồng phương thức (Method Overloading)

Trong PHP, nạp chồng phương thức cho phép bạn tạo nhiều phương thức có cùng tên nhưng khác chức năng. Sử dụng nạp chồng phương thức, người dùng có thể tạo các phương thức động, không được khai báo bên trong phạm vi của lớp. Nạp chồng phương thức có nghĩa là tạo các phương thức động. Các phương thức nạp chồng được định nghĩa là công khai. Các thực thể (phương thức và thuộc tính) có thể được truy cập, sau khi đối tượng cho một lớp được tạo.

Ví dụ:

<?php
class Model {
  public function __call($name, $arguments) {
      echo "This is an object method '$name' " . implode(", ", $arguments) . "<br>";
  }
  
  public static function __callStatic($name, $arguments) {
      echo "This is a static method '$name' " . implode(", ", $arguments) . "<br>";
  }
}

// Create new object:
$obj = new Model;
$obj->runModel("Object context");
Model::runModel("Static context");

Trong ví dụ trên, lớp Model được định nghĩa trong đó các magic method đã được tạo. Các hàm này là __call() và __callStatic(). __call() được kích hoạt khi gọi các phương thức nạp chồng trong ngữ cảnh đối tượng. __callStatic() được kích hoạt trong khi gọi các phương thức nạp chồng static. Người ta có thể truy cập các hàm thông qua đối tượng mới, sử dụng các đối số tương ứng để gọi trong ngữ cảnh object và ngữ cảnh static.

Nạp chồng thuộc tính (Property Overloading)

Nạp chồng thuộc tính trong PHP cho phép tạo các thuộc tính động dựa trên ngữ cảnh. Nó không yêu cầu một dòng mã riêng để tạo thuộc tính. Một thuộc tính quá tải thường không được liên kết với instance của class cũng như không được khai báo trong phạm vi của class.

Một số hàm được sử dụng trong nạp chồng thuộc tính:

  • __set(): Khởi tạo các thuộc tính nạp chồng
  • __get(): Để đọc dữ liệu từ các thuộc tính không thể truy cập
  • __isset(): Để kiểm tra các thuộc tính nạp chồng
  • __unset(): Được gọi khi sử dụng cho các thuộc tính nạp chồng

Ví dụ:

<?php
class Model{
    private $data = array();
    public $declared = 1;
    // overloading used when accessed outside the class
    private $hidden = 2;
    public function __set($name, $value){
        echo "Set members '$name' to '$value'<br/>";
        $this->data[$name] = $value;
    }
      //function definition
    public function __get($name){
        echo "Get members '$name'<br/>";
        if(array_key_exists($name, $this->data)){
            return $this->data[$name];
        }
        return NULL;
    }

    //function definition
    public function __isset($name)
    {
        echo "Isset members '$name'<br/>";
        return isset($this->data[$name]);
    }

    public function __unset($name)
    {
        echo "Unset members '$name'<br/>";
        unset($this->data[$name]);
    }

    // getHidden function

    public function getHidden()
    {
        return $this->hidden;
    }

}

$obj = new Model;
$obj->name = "John";
echo $obj->name;
echo "<br/>";
// use isset function to chec name is set or not var_dump(isset($obj->name));

//uset name
unset($obj->name);
var_dump(isset($obj->name));
echo "<br/>";
// public member
echo $obj->declared;
echo "<br/>";
// private properties are not allowed to access inside the class
echo  $obj->getHidden();
echo "<br/>";
echo $obj->hidden;

Trong ví dụ trên, lớp Model được tạo trong đó một mảng đã được tạo để định vị dữ liệu nạp chồng. Một biến được khai báo đã được tạo, cùng với một biến private $hidden. Các hàm __set, __get(), __isset(), __unset() và getHidden() được định nghĩa trong dass Model . Một đối tượng $obj được tạo, khởi tạo lớp Model. Chúng ta thấy, mỗi khi thao tác với thuộc tính của đối tượng, các hàm magic method trên được gọi với bối cảnh tương ứng.

Magic Methods

Trong PHP, phương thức nạp chồng cũng tạo ra các magic method (phương thức ma thuật). Các magic method được kích hoạt trong ngữ cảnh đối tượng và được sử dụng để tạo các thực thể động. Sau đây là một số magic method được sử dụng trong PHP:

  • __set() được kích hoạt khi các thuộc tính nạp chồng được khởi tạo.
  • __get() được kích hoạt khi các thuộc tính nạp chồng được sử dụng kết hợp với PHP câu lệnh in.
  • __isset() là một magic method, được gọi khi các thuộc tính nạp chồng được kiểm tra bằng hàm isset()
  • __unset() là một hàm được gọi khi sử dụng PHP unset() cho các thuộc tính nạp chồng

Bài viết liên quan:

Hướng dẫn sử dụng xdebug để gỡ lỗi PHP bằng visual studio code môi trường windows
Hướng dẫn cấu hình Extension live server tự động tải lại PHP khi cập nhật file trên visual studio code
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
Abstract Class (lớp trừu tượng) trong PHP
Interface trong hướng đối tượng PHP
Method (phương thức), public,private,protected, method overriding trong hướng đối tượng PHP
Iterable và iterator trong PHP
Namespace trong hướng đối tượng 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

2. PHÂN TÍCH VÀ ĐẶC TẢ HỆ THỐNG

3. THIẾT KẾ HỆ THỐNG

1. TỔNG QUAN KIẾN THỨC THỰC HÀNH TRIỂN KHAI DỰ ÁN CÔNG NGHỆ THÔNG TIN

Hướng dẫn tự cài đặt n8n comunity trên CyberPanel, trỏ tên miền

Mẫu prompt tạo mô tả chi tiết bối cảnh

Giới thiệu

hocvietcode.com là website 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 HỌC VIẾT CODE

© hocvietcode.com - 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 nhập bằng google
Đă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.
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
×