Trả lại int php

Theo như thông tin từ Laravel News, Typed Properties 2. 0 RFC tại thời điểm tháng 10/2018 đã được người dân sử dụng PHP bầu cử với tỷ lệ 70 phiếu thuận và 1 phiếu chống. Điều này chắc chắn sẽ là 1 bản cập nhật mới bởi vì đây là 1 thay đổi lớn nhất về ngôn ngữ và cần ít nhất 2/3 số lượng đồng ý theo luật định

Và cái thay đổi đó sẽ cho cái kết quả ra như thế này

class User {
    public int $id;
    public string $name;
 
    public function __construct[int $id, string $name] {
        $this->id = $id;
        $this->name = $name;
    }
}

Ơ mà trông cũng thân quen mà? . 4 ra mắt] thì đây là hiện tại

class User {
    /** @var int $id */
    private $id;
    /** @var string $name */
    private $name;
 
    public function __construct[int $id, string $name] {
        $this->id = $id;
        $this->name = $name;
    }
 
    public function getId[]: int {
        return $this->id;
    }
    public function setId[int $id]: void {
        $this->id = $id;
    }
 
    public function getName[]: string {
        return $this->name;
    }
    public function setName[string $name]: void {
        $this->name = $name;
    }
}

So sánh 2 mã chúng ta có thể thấy biến $id ở mã trên đã được định nghĩa sẵn kiểu int, chỉ cần viết rút gọn. Còn mã bên dưới thì $id chỉ là biến bất kỳ, và các mã sau ta phải định nghĩa kiểu int cho mỗi lần gọi mã

Và BIỆT, viết kiểu trên vẫn sẽ đảm bảo toàn vẹn cho kiểu dữ liệu. Trào ngược tại sao tỷ lệ đồng ý là 70/1. Đến mình còn muốn hết chân tay lên đồng ý cơ mà [dance4]

[Ơ mà khoan, tôi đang ở vũ trụ PHP mà. Sao bị bay màu sang vũ trụ Java thế?

Chúng ta sẽ cùng đến với mô tả từ RFC

"Với các kiểu vô hướng và trả về, PHP đã có 1 sức mạnh đáng kể đối với hệ thống kiểu dữ liệu sẵn có của PHP. Tuy nhiên, công việc không thể khai báo kiểu cho các lớp tính thuộc tính đã có và đang buộc các nhà phát triển sử dụng các phương thức get và set để thực thi việc đặt kiểu công việc. Điều này đã và đang được thực hiện quá nhiều thứ không cần thiết, việc sử dụng thiếu gọn nhẹ và hiệu suất cũng không cao. RFC này sẽ giải quyết vấn đề này bằng cách giới thiệu công việc hỗ trợ khai báo loại thuộc tính cho các hạng nhất"

Và đây là hỗ trợ về các kiểu trong bản PHP 7. 4 được đề nghị sắp tới

class Example {
    // All types with the exception of "void" and "callable" are supported
    public int $scalarType;
    protected ClassName $classType;
    private ?ClassName $nullableClassType;
 
    // Types are also legal on static properties
    public static iterable $staticProp;
 
    // Types can also be used with the "var" notation
    var bool $flag;
 
    // Typed properties may have default values [more below]
    public string $str = "foo";
    public ?string $nullableStr = null;
 
    // The type applies to all properties in one declaration
    public float $x, $y;
    // equivalent to:
    public float $x;
    public float $y;
}

Ồ và ở đây chúng ta không bàn tới kiểu callable và kiểu void

Lý do được giải thích như sau

"Kiểu trống không được hỗ trợ, bởi vì nó không hữu ích và có nghĩa là không rõ ràng. Theo một cách giải thích phần cứng, các thuộc tính của kiểu void không thể đọc được và cũng không thể ghi vào, vì không có cách nào để xây dựng giá trị của kiểu void trong PHP. Theo một giải thích linh hoạt hơn [phù hợp với thực tế là chúng ta cho phép sử dụng giá trị trả về của hàm void] một thuộc tính của loại void chỉ có thể giữ giá trị null. Theo 2 cách giải thích trên, chúng ta không cần thuộc tính void. Điều này phù hợp với chú thích loại tham số. "

Còn với callable style thì cú pháp sẽ hơi kỳ dị 1 tẹo

class Test {
    public callable $cb;
 
    public function __construct[] {
        // $this->cb is callable here
        $this->cb = [$this, 'method'];
    }
 
    private function method[] {}
}
 
$obj = new Test;
// $obj->cb is NOT callable here
[$obj->cb][];

Hiện tại đó là sự thay đổi có thể xảy ra với PHP 7. 4. Các bạn có thể đọc kỹ hơn để quay lại liên kết Laravel News và wiki của PHP mình đã đưa ra bên trên. Cảm ơn các bạn đã đọc bài viết

Chủ Đề