2017-07-24 20 views
6

Tôi đã đọc trong một cuốn sách giáo khoa WordPress nơi tôi tìm thấy một mô tả nhanh chóng cho các chức năng sau:Tại sao các hàm PHP có thể chấp nhận các đối số boolean khi nó yêu cầu các số nguyên?

function is_super_admin($user_id = false) {... 

chức năng này xác định nếu người dùng là một quản trị trang web.

Tuy nhiên, câu hỏi của tôi là về cách PHP xử lý các thông số.

Hàm trên nhận được một tham số nguyên, và nếu bạn không truyền bất kỳ tham số nào thì nó sẽ gán giá trị mặc định là FALSE.

Đây là câu hỏi của tôi:

FALSE là một loại BOOLEAN dữ liệu, và chức năng này nên chấp nhận một loại INTEGER dữ liệu.

Vậy làm thế nào nó có thể được phép cung cấp một giá trị boolean, khi chúng ta nên cung cấp một giá trị số nguyên?

+1

Bạn không khai báo bất cứ nơi nào tham số là 'int', tại sao * không nên * nó hoạt động? – deceze

+0

PHP được nhập động. Bạn có thể chuyển đối số của các loại khác nhau, trừ khi được loại trừ theo cách cụ thể. Trong trường hợp cụ thể này, về cơ bản bạn có thể vượt qua bất cứ điều gì. – Mjh

+0

Đọc thêm về [loại juggling] (http://php.net/manual/en/language.types.type-juggling.php) trong PHP. – axiac

Trả lời

9

PHP 7 giới thiệu khai báo loại vô hướng.

Chúng có hai loại: cưỡng chế (mặc định) và nghiêm ngặt. Các loại sau đây cho các tham số bây giờ có thể được thực thi (hoặc cưỡng chế hoặc nghiêm ngặt): chuỗi (chuỗi), số nguyên (int), số dấu phẩy động (float), và boolean (bool). Họ tăng thêm các loại khác được giới thiệu trong PHP 5: tên lớp, giao diện, mảng và có thể gọi được.

Các dòng sau

function is_super_admin($user_id = false) { . . . . 

không xác định kiểu của paramater. Nếu thay vào đó, thay vào đó:

function is_super_admin(int $user_id = false) { . . . . 

thì nó sẽ tạo ra lỗi.

Tôi đoán giá trị mặc định là false vì việc kiểm tra giá trị hợp lệ dễ dàng hơn bằng cách sử dụng đơn giản if vì cả false và/hoặc int bằng 0 sẽ được tính là false.

Thông tin thêm về PHP 7 tính năng mới here.

Các vấn đề liên quan