2012-05-02 27 views
5

Có cách nào để yêu cầu tham số hàm là một kiểu dữ liệu cụ thể chẳng hạn như một mảng không? Ví dụ: một cái gì đó như thế này:PHP. Có cách nào để yêu cầu tham số hàm là một mảng không?

function example(array $array){} 

Nếu điều đó có hiệu quả với tất cả các kiểu dữ liệu? Có một nguồn tài nguyên tốt sẽ chỉ cho tôi cách thực hiện điều này không?

+5

Không cho tất cả, nhưng đối với mảng và các loại (lớp/interfaces) . Bạn thấy rằng tài liệu trong hướng dẫn sử dụng. Hãy làm bài tập ở nhà của bạn trước và nhìn vào đó, nó trả lời câu hỏi của bạn với nhiều chi tiết hơn. – hakre

+0

http://me.veekun.com/blog/2012/04/09/php-a-fractal-of-bad-design/#functions – maialithar

Trả lời

3

Chỉnh sửa: Vâng, bạn có thể gõ-gợi ý với mảng, vì vậy thay đổi nội dung câu trả lời của tôi và thay đổi cho phù hợp.

Điều bạn muốn làm được gọi là type-hinting. Bạn không thể nhập các loại dữ liệu cơ bản gợi ý, chẳng hạn như int, string, bool. Bạn có thể gõ-gợi ý với array hoặc các đối tượng và giao diện:

function example_hinted1(array $arr) { 

} 

function example_hinted2(User $user) { 

} 

Calling example_hinted1(5) sẽ tạo ra một lỗi nghiêm trọng PHP (không phải là một ngoại lệ), nhưng gọi đó là đi qua một mảng là hoàn toàn ok.

Nếu bạn cần phải chắc chắn rằng một số lập luận cho một chức năng là từ một loại cơ bản bạn có thể mô phỏng hành vi này với mã bên trong hàm của bạn:

function example($number) { 
    if (!is_int($number) { 
    throw new Exception("You must pass an integer to ".__FUNCTION__."()"); 
    } 
    // rest of your function 
} 

Vì vậy, những đoạn sẽ làm việc:

example(1); 

$b = 5 + 8; 
example($b); 

trong khi những sẽ ném một ngoại lệ:

example('foo'); 
example(array(5, 6)); 
example(new User()); 
+0

Cảm ơn câu trả lời được giải thích tốt, nó đã giúp ích rất nhiều. –

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