Các giá trị luôn là một chuỗi array
. Hãy chịu đựng các chuỗi và làm việc với loại array
Nếu đó là sự thật, những điều này không thể xảy ra
$sweetPromise = new SweetPromise[];
echo $sweetPromise->getValues[]; // null or array?
$sweetPromise->setValues['{55}']; // string or array?
echo $sweetPromise->getValues[]; // string or array?
Chúng tôi không có ý tưởng về giá trị chúng tôi đưa vào. Chúng tôi không thể đưa ra bất kỳ giả định nào trừ khi chúng tôi sẵn sàng mạo hiểm loại lỗi và xác minh thủ công từng loại
Bộ lọc trung thực sẽ hiển thị lớp trên như thế này
class SweetPromise
{
private $values;
public function setValues[$values]
{
$this->values = $values;
}
public function getValues[]
{
return $this->values;
}
}
Bây giờ rõ ràng là chúng ta không thể tin vào docblocks. Chủ yếu là do các loại docblock không dựa trên mã thực tế mà dựa trên trạng thái lý tưởng = nếu mọi phương thức đều đáng tin cậy 100%, được gọi theo thứ tự được xác định chính xác và với các biến đầu vào được nhập đáng tin cậy 100%. Mà họ không
Hàng triệu dòng với Docblocks
giọng này hơi buồn. Vậy chúng ta có thể làm gì nếu có hàng triệu dòng mã với docblocks?
Chúng tôi có một vài lựa chọn
- đi từng dòng một, cố gắng phát hiện mẫu và thêm khai báo loại nghiêm ngặt, đơn đầu tiên
- sau đó truyền loại này tới tất cả các cuộc gọi của mã này
- mạo hiểm chuyển đổi khối tài liệu tự động và để người dùng thực hiện thử nghiệm;
- đi với một số loại
"Một số loại" là gì?
Một số loại dựa trên các giá trị thực tế, hoạt động và cấu trúc logic mà trong bất kỳ trường hợp nào luôn có chính xác một loại
- giá trị vô hướng chính xác
- các giá trị dựa trên các hàm bên trong PHP
- kết quả của toán tử nhị phân
$anything && $somethingElse
luôn trả vềbool
0 luôn trả về$sweetPromise = new SweetPromise[]; echo $sweetPromise->getValues[]; // null or array? $sweetPromise->setValues['{55}']; // string or array? echo $sweetPromise->getValues[]; // string or array?
1$sweetPromise = new SweetPromise[]; echo $sweetPromise->getValues[]; // null or array? $sweetPromise->setValues['{55}']; // string or array? echo $sweetPromise->getValues[]; // string or array?
2 luôn trả về$sweetPromise = new SweetPromise[]; echo $sweetPromise->getValues[]; // null or array? $sweetPromise->setValues['{55}']; // string or array? echo $sweetPromise->getValues[]; // string or array?
bool
Không chỉ các giá trị một dòng mà cả các cấu trúc phức tạp hơn như mảng được tạo và điền
function provideDreams[]
{
$dreams = [];
foreach [$this->dreamRepository->fetchAll[] as $dream] {
$dreams[] = $dream;
}
return $dreams;
}
Mã này luôn trả về _______13_______, bất kể _______ 0_______5 thực sự là gì
Dựa vào 4 quy tắc này, chúng ta có thể hoàn thành các loại sau một cách chắc chắn 100%
final class Reality
{
- public function getAge[]
+ public function getAge[]: int
{
return 100;
}
- public function removeTax[int $value]
+ public function removeTax[int $value]: int
{
return $value - 200;
}
- public function transform[$value]
+ public function transform[$value]: string
{
if [$value === null] {
return '';
}
return base64_encode[$value];
}
}
Và nhiều hơn nữa
Tùy thuộc vào độ tuổi của dự án của bạn, có một yêu cầu để thực hiện công việc này. Bạn phải sử dụng PHP 7. 0, nơi đã được thêm vào
Tự mình thử
Hiệu trưởng có thể xử lý một số trường hợp trên trong phiên bản cơ bản. Thêm các quy tắc này vào mã của bạn và tự mình xem
________số 8_______Chạy Hiệu trưởng và xem có bao nhiêu loại mới đã được thêm vào. Trong dự án mà chúng tôi đã thử nghiệm các quy tắc này, chúng tôi đã thay đổi hơn 40 tệp trong lần chạy đầu tiên. Từ 0 đến 40 tệp, khá ấn tượng. Và như bạn đã biết, các loại nghiêm ngặt lan truyền theo cấp số nhân
Đến trong Hiệu trưởng Doanh nghiệp
Phần còn lại của các trường hợp và hơn thế nữa sẽ được đề cập trong các quy tắc của phiên bản Rector Enterprise sắp tới, với nhiều quy tắc và tính năng bổ sung hơn theo giấy phép trả phí riêng
Trong PHP 7, một tính năng mới, Khai báo kiểu trả về đã được giới thiệu. Khai báo kiểu trả về xác định kiểu giá trị mà một hàm sẽ trả về. Các loại sau cho các loại trả về có thể được khai báo
- int
- trôi nổi
- bool
- chuỗi
- giao diện
- mảng
- gọi được
Ví dụ - Loại trả về hợp lệ
Nó tạo ra đầu ra trình duyệt sau -
5
Ví dụ - Loại trả về không hợp lệ
Nó tạo ra đầu ra trình duyệt sau -
Fatal error: Uncaught TypeError: Return value of returnIntValue[] must be of the type integer, float returned...