PHP Type Hint giúp chúng ta định hình được kiểu dữ liệu

29th Oct 2022
giúp chúng ta định hình được kiểu dữ liệu
Table of contents

PHP Type Hint theo quan điểm cá nhân của mình là một cách khai báo kiểu tham số truyền vào và kiểu dữ liệu trả về để chúng ta Clean Code của mình để người khác đọc dễ hiểu và có thể tránh những trường hợp không mong muốn xảy ra.

PHP Type Hint có 3 cấp độ:

– Cấp độ 1: Chỉ sử dụng comment: cấp độ này ta sử dụng comment để người đọc code có thể hiểu mục đích của chúng ta cũng như hiểu các kiểu dữ liệu ta truyền vao

– Cấp độ 2: Khai báo kiểu tham số truyền vào: khi này chúng ta ép kiểu dữ liệu cho tham số truyền vào ví dụ ta truyền vào hàm Sum 1 tham số là $number 1 có kiểu dữ liệu là int thì khi ta truyền vào 4.32 thì nó sẽ ép kiểu về int lúc này 4.32 trở thành 4

-Cấp độ 3: Khai báo cả kiểu tham số truyền vào và kiểu giá trị trả về : chúng ta ép cả kiểu tham số truyền vào và kiểu dữ liệu trả về.

Việc sử dụng Type Hint giúp chúng ta định hình được kiểu dữ liệu, tiết kiệm được comment dễ hiểu và tạo thói quen tốt khi chúng ta viết code.

Type hinting là một hoạt động lập trình nhận diện dạng giá trị mong muốn, ví dụ dạng giá trị một hàm mong đợi cho một tham số. Để thực hiện type hinting đặt dạng class mong muốn trước tên biến tham số.

class SomeClass {
  function doThis(OtherClass $var) {
  }
}

Nếu tham số truyền cho phương thức doThis() không phải là dạng OtherClass hoặc một lớp mở rộng từ OtherClass, PHP sẽ sinh ra một lỗi nghiêm trọng:

class OtherClass {}
$some = new SomeClass();
$other = new OtherClass();
$some->doThis($other);
$some->doThis($some);

Chúng ta cùng xem ví dụ sau đây về Type Hinting:

<!doctype html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <title>Ví dụ về Type Hinting</title>
    <link rel="stylesheet" href="style.css">
</head>
<body>
    <?php
    #------------ ĐỊNH NGHĨA CLASS ----------------------#
    /* Class Department.
     * Lớp này có hai thuộc tính: name và employees[].
     * Lớp này có hai phương thức:
     * - __construct()
     * - addEmployee()
     */
    class Department {
        private $_name;
        private $_employees;
        function __construct($name) {
            $this->_name = $name;
            $this->_employees = array();
        }
        function addEmployee(Employee $e) {
            $this->_employees[] = $e;
            echo "<p>{$e->getName()} has been added to the {$this->_name} department.</p>";
        }
    }

    /* Class Employee.
     * Lớp này chưa một thuộc tính: name.
     * Lớp này chứa 2 phương thức:
     * - __construct()
     * - getName()
     */
    class Employee {
        private $_name;
        function __construct($name) {
            $this->_name = $name;
        }
        function getName() {
            return $this->_name;
        }
    }
    #------------ KẾT THÚC ĐỊNH NGHĨA CLASS ----------------------#

    // Tạo một phòng mới: Quản lý nhân sự
    $hr = new Department('Phòng Nhân sự');

    // Tạo hai nhân viên mới
    $e1 = new Employee('Nguyễn Văn A');
    $e2 = new Employee('Nguyễn Văn B');

    // Thêm hai nhân viên này vào Phòng Nhân sự
    $hr->addEmployee($e1);
    $hr->addEmployee($e2);

    unset($hr, $e1, $e2);
    ?>
</body>
</html>
Bạn thấy bài viết này như thế nào?
2 reactions

Add new comment

Image CAPTCHA
Enter the characters shown in the image.

Related Articles

Danh sách này có 4 sản phẩm nên chưa cần phân trang, nếu số lượng sản phẩm lên đến vài chục sản phẩm

Hiện nay kiến trúc Microservices đang là chủ đề được cộng đồng Developer vô cùng quan tâm

Hôm nay chúng ta cùng tìm hiểu về Eloquent trong Laravel với mối quan hệ nhiều - nhiều (many to many relationship)

Kiểm soát hợp lí truy cập nội dung trang web là yếu tố quyết định trong việc điều hành một máy chủ bảo mật.

Trong lập trình web, authorization (phân quyền) là chức năng vô cùng quan trọng và không thể thiếu