Là sai PHP

PHP được thiết kế [hay đúng hơn là phát triển] để sử dụng với các yêu cầu web, nơi bạn thường xuyên xử lý đầu vào chuỗi [tham số URL hoặc yêu cầu POST từ một biểu mẫu trong trình duyệt]. Như vậy nó sẽ tự cast string sang các kiểu khác

Một ví dụ đơn giản về điều này là

Fatal error: Null can not be used as a standalone type in .. on line ...
Fatal error: False can not be used as a standalone type in .. on line ...
4 đưa ra
Fatal error: Null can not be used as a standalone type in .. on line ...
Fatal error: False can not be used as a standalone type in .. on line ...
5, không phải lỗi, hoặc
Fatal error: Null can not be used as a standalone type in .. on line ...
Fatal error: False can not be used as a standalone type in .. on line ...
6', hoặc một số cách diễn giải khác. Theo logic tương tự, chuỗi
Fatal error: Null can not be used as a standalone type in .. on line ...
Fatal error: False can not be used as a standalone type in .. on line ...
7 có thể được sử dụng làm số
Fatal error: Null can not be used as a standalone type in .. on line ...
Fatal error: False can not be used as a standalone type in .. on line ...
8

Trong khi đó, giống như nhiều ngôn ngữ, PHP coi một số giá trị nhất định là "giả" khi chuyển thành boolean - những giá trị "trống rỗng" theo trực giác, như bạn nói. Điều đó bao gồm số

Fatal error: Null can not be used as a standalone type in .. on line ...
Fatal error: False can not be used as a standalone type in .. on line ...
8, cũng như chuỗi rỗng
function foo[]: null {}
function bar[]: false {}
0 và mảng trống
function foo[]: null {}
function bar[]: false {}
1. Trong một câu lệnh
function foo[]: null {}
function bar[]: false {}
2, biểu thức rõ ràng được chuyển thành boolean, vì vậy
function foo[]: null {}
function bar[]: false {}
3 giống như
Fatal error: Null can not be used as a standalone type in .. on line ...
Fatal error: False can not be used as a standalone type in .. on line ...
50

Đặt hai điều này lại với nhau, bạn sẽ có một câu hỏi hóc búa. một mặt, như bạn nói

Fatal error: Null can not be used as a standalone type in .. on line ...
Fatal error: False can not be used as a standalone type in .. on line ...
7 là một chuỗi không trống; . PHP chọn coi "tính không" quan trọng hơn "tính chặt chẽ", do đó,
Fatal error: Null can not be used as a standalone type in .. on line ...
Fatal error: False can not be used as a standalone type in .. on line ...
7 được coi là "giả"

Tham gia bản tin của tôi

PHP8. 0 đã thêm hỗ trợ cho Các loại kết hợp, giúp có thể khai báo một loại dưới dạng kết hợp của hai hoặc nhiều loại. Nó cho phép

function foo[]: null {}
function bar[]: false {}
8 và
function foo[]: null {}
function bar[]: false {}
9 là các loại có thể cho Loại Liên minh, nhưng không cho phép sử dụng chúng làm loại độc lập

Trước PHP 8. 2, chỉ có thể sử dụng

function foo[]: null {}
function bar[]: false {}
9 và
function foo[]: null {}
function bar[]: false {}
8 như một phần của Loại liên kết

function foo[]: string|null {}
function strpos[]: int|false {}

Cố gắng sử dụng loại

function foo[]: null {}
function bar[]: false {}
9 hoặc
function foo[]: null {}
function bar[]: false {}
8 làm loại độc lập [i. e mà không phải là một phần của loại liên kết] dẫn đến lỗi nghiêm trọng trong thời gian biên dịch trong các phiên bản PHP PHP 8. 0 và PHP8. 1

function foo[]: null {}
function bar[]: false {}
Fatal error: Null can not be used as a standalone type in .. on line ...
Fatal error: False can not be used as a standalone type in .. on line ...

Trong PHP8. 2 trở lên, cho phép sử dụng

function foo[]: null {}
function bar[]: false {}
9 và
function foo[]: null {}
function bar[]: false {}
8 làm loại độc lập. Đoạn mã dẫn đến lỗi nghiêm trọng ở trên không còn đưa ra bất kỳ lỗi nào trong PHP 8. 2 trở lên. Điều này làm cho hệ thống kiểu của PHP trở nên biểu cảm và đầy đủ hơn để có thể khai báo chính xác các kiểu trả về, tham số và thuộc tính

Hơn nữa, PHP 8. 2 trở lên cho phép sử dụng Loại kết hợp với

function foo[]: null {}
function bar[]: false {}
8, điều này dẫn đến lỗi trong các phiên bản PHP cũ hơn

Các hàm và phương thức PHP phải sử dụng nhận xét PHPDoc để cung cấp thông tin loại chính xác có thể trực tiếp khai báo loại trong chính hàm đó

  class AnonUser extends User {
-     /**
-      * @return false
-      */
-     public function isAdmin[]: bool {
+     public function isAdmin[]: false {
          return false;
      }
  }

Phân biệt giữa các loại trả về
function foo[]: null {}
function bar[]: false {}
9 và
function foo[]: null {}
function bar[]: false {}
9

Lưu ý rằng các hàm được khai báo với kiểu trả về

function foo[]: null {}
function bar[]: false {}
9 phải rõ ràng là
Fatal error: Null can not be used as a standalone type in .. on line ...
Fatal error: False can not be used as a standalone type in .. on line ...
2, nếu không lệnh gọi hàm dẫn đến ngoại lệ
Fatal error: Null can not be used as a standalone type in .. on line ...
Fatal error: False can not be used as a standalone type in .. on line ...
3. Các hàm không trả về giá trị một cách rõ ràng, do hoàn toàn không có câu lệnh
Fatal error: Null can not be used as a standalone type in .. on line ...
Fatal error: False can not be used as a standalone type in .. on line ...
4 hoặc bằng cách bỏ qua giá trị trả về [
Fatal error: Null can not be used as a standalone type in .. on line ...
Fatal error: False can not be used as a standalone type in .. on line ...
5] có thể tiếp tục sử dụng loại
function foo[]: null {}
function bar[]: false {}
9 làm loại trả về

Ví dụ sau đưa ra một ngoại lệ

Fatal error: Null can not be used as a standalone type in .. on line ...
Fatal error: False can not be used as a standalone type in .. on line ...
3 vì lẽ ra nó phải được khai báo với kiểu
function foo[]: null {}
function bar[]: false {}
9 thay vì kiểu trả về
function foo[]: null {}
function bar[]: false {}
9

function foo[]: null {}
function bar[]: false {}
3____14

Trừ khi

function foo[]: null {}
function bar[]: false {}
9 là kiểu trả về, khai báo hàm với kiểu trả về
function foo[]: null {}
function bar[]: false {}
9 hoặc
  class AnonUser extends User {
-     /**
-      * @return false
-      */
-     public function isAdmin[]: bool {
+     public function isAdmin[]: false {
          return false;
      }
  }
2 là cách tiếp cận phù hợp hơn

Nullability trong loại
function foo[]: null {}
function bar[]: false {}
9

Nếu một loại được khai báo là

function foo[]: null {}
function bar[]: false {}
9, thì nó không thể được đánh dấu là "không có giá trị" bằng cú pháp
  class AnonUser extends User {
-     /**
-      * @return false
-      */
-     public function isAdmin[]: bool {
+     public function isAdmin[]: false {
          return false;
      }
  }
5, vì nó dẫn đến một khai báo loại dư thừa. PHP ném lỗi vào thời gian biên dịch nếu nó gặp lỗi

function foo[]: null {}
function bar[]: false {}
8
function foo[]: null {}
function bar[]: false {}
9

Thay đổi liên quan

  • PHP8. 0. Các loại liên minh
  • PHP8. 0. Cảnh báo chức năng nội bộ hiện ném ngoại lệ
    Fatal error: Null can not be used as a standalone type in .. on line ...
    Fatal error: False can not be used as a standalone type in .. on line ...
    3 và
      class AnonUser extends User {
    -     /**
    -      * @return false
    -      */
    -     public function isAdmin[]: bool {
    +     public function isAdmin[]: false {
              return false;
          }
      }
    7
  • PHP8. 1. Các loại giao lộ
  • PHP8. 1. loại
      class AnonUser extends User {
    -     /**
    -      * @return false
    -      */
    -     public function isAdmin[]: bool {
    +     public function isAdmin[]: false {
              return false;
          }
      }
    2
  • PHP8. 2. loại
      class AnonUser extends User {
    -     /**
    -      * @return false
    -      */
    -     public function isAdmin[]: bool {
    +     public function isAdmin[]: false {
              return false;
          }
      }
    9

Tác động tương thích ngược

Trước PHP 8. 2, không được phép sử dụng

function foo[]: null {}
function bar[]: false {}
9 và
function foo[]: null {}
function bar[]: false {}
8 làm loại độc lập. PHP8. 2 trở lên cho phép chúng dưới dạng các loại độc lập và điều này sẽ không gây ra bất kỳ sự cố tương thích nào trong các phiên bản PHP cũ hơn

Đúng hay sai trong PHP?

Định nghĩa và cách sử dụng . Hàm này trả về true [1] nếu biến là boolean, ngược lại nó trả về false/nothing. The is_bool[] function checks whether a variable is a boolean or not. This function returns true [1] if the variable is a boolean, otherwise it returns false/nothing.

Sai nghĩa là gì trong PHP?

PHP không vi phạm bất kỳ quy tắc nào với các giá trị true và false. Giá trị false không phải là hằng số cho số 0, nó là giá trị boolean biểu thị sai . Giá trị true cũng không phải là hằng số cho 1, nó là một giá trị boolean đặc biệt cho biết giá trị true.

Sai có bằng NULL trong PHP không?

Đó là ngôn ngữ cụ thể, nhưng trong PHP. Null có nghĩa là "không có gì". Var chưa được khởi tạo. Sai có nghĩa là "không đúng trong ngữ cảnh boolean" . Được sử dụng để thể hiện rõ ràng rằng bạn đang xử lý các vấn đề logic.

Sai có phải là bool không?

FALSE không phải là boolean , chúng là Boolean . Chúng là các thể hiện tĩnh của hai đối tượng trình bao Boolean tương ứng với các giá trị boolean đúng và sai. Boolean tương tự như một enum. Các trường hợp TRUE và FALSE là các trường hợp được trả về bởi Boolean.

Chủ Đề