2011-10-24 13 views
5

Có thể xác định đối số hàm dưới dạng nhiều loại có thể không? Ví dụ, một hàm có thể lấy một chuỗi hoặc một số nguyên để thực hiện điều gì đó. Có thể nào đó bằng cách nào đó định nghĩa nó như thế này?Xác định nhiều loại đối số hàm trong PHP

function something(int|string $token) {} 

Hoặc chỉ một loại cho mỗi đối số được hỗ trợ?

(tâm trí bạn, tôi biết tôi có thể lọc đầu vào sau này, tôi chỉ muốn có lập luận của tôi gõ)

Trả lời

2

Điều tốt nhất bạn có thể làm là gọi Loại Hinting và được giải thích ở đây:

http://php.net/manual/en/language.oop5.typehinting.php

Cụ thể, bạn có thể gợi ý loại lớp hoặc loại mảng, nhưng (như hướng dẫn sử dụng nói) "Đề xuất kiểu truyền thống với int và chuỗi không được hỗ trợ." Vì vậy, tôi đoán rằng những gì bạn đang cố gắng để đạt được là không thể ở cấp độ này.

Tuy nhiên, bạn có thể tạo trình bao bọc của riêng mình, v.v. Có thể có hàng nghìn cách để xử lý việc này.

+1

Chúc mừng, cuối cùng tôi biết nó được gọi là Kiểu Gợi ý. – Swader

+1

Nó được gọi là Hinting trong PHP (chỉ?) Bởi vì nó là trong thực tế chỉ là một gợi ý cho các thông dịch viên PHP, do đó được hướng dẫn để "giả tạo" kiểm tra loại đối số và ném một lỗi nếu nó không phù hợp với gợi ý. Trong các ngôn ngữ gõ tĩnh, nó là một điều cơ bản và bắt buộc, một phần của cú pháp cho các hàm, và nó không được gọi như vậy ... trên thực tế, tôi không nghĩ nó có một cái tên cụ thể khác ... – Palantir

+0

Điều đó rất tốt biết, cảm ơn! – Swader

0

PHP được tạo kiểu động - nhưng kiểu gián tiếp đã được thêm vào ngôn ngữ - vì vậy nếu bạn đã không ám chỉ các tham số bạn có thể vượt qua bất kỳ loại bạn thích:

function something($token) 
{ 
    if (is_numeric($token)) { 
    // its a float, double, integer 

    } else { 
    // its a string, array, object 
    } 
} 

(ngoài khơi đầu tôi không chắc chắn về cách thức xử lý tài nguyên).

Tuy nhiên nếu bạn muốn lập trình bằng ngôn ngữ được nhập mạnh, thì (IMHO) bạn nên sử dụng một cái gì đó khác với PHP

+0

'is_numeric' cũng bao gồm các chuỗi số, chứ không phải các tài nguyên. – deceze

+0

Cảm ơn, chỉ cần cố gắng tối ưu hóa nó cho HipHop. – Swader