Sep
19

Type hinting trong PHP

Author admin    Category PHP     Tags

Khái niệm type hinting xuất hiện từ phiên bản php 5.1, “ép” người sử dụng hàm phải truyền vào kiểu dữ liệu đúng với ý đồ của người viết hàm

Type hinting hiện tại hỗ trợ 2 kiểu dữ liệu: object và array. Kiểu int và string chưa được hỗ trợ.

Xét ví dụ sau:

<?php
// An example class
class MyClass
{
    /**
     * A test function
     *
     * First parameter must be an object of type OtherClass
     */
    public function test(OtherClass $otherclass) {
        echo $otherclass->var;
    }
 
 
    /**
     * Another test function
     *
     * First parameter must be an array
     */
    public function test_array(array $input_array) {
        print_r($input_array);
    }
}
 
// Another example class
class OtherClass {
    public $var = 'Hello World';
}
?>

- Hàm test yêu cầu tham số phải có kiểu dữ liệu là instance của OtherClass
- Hàm test_array yêu cầu tham số truyền vào phải là một array

Chúng ta thử sử dụng: lỗi sẽ xảy ra nếu truyền sai kiểu dữ liệu

<?php
// An instance of each class
$myclass = new MyClass;
$otherclass = new OtherClass;
 
// Fatal Error: Argument 1 must be an object of class OtherClass
$myclass->test('hello');
 
// Fatal Error: Argument 1 must be an instance of OtherClass
$foo = new stdClass;
$myclass->test($foo);
 
// Fatal Error: Argument 1 must not be null
$myclass->test(null);
 
// Works: Prints Hello World
$myclass->test($otherclass);
 
// Fatal Error: Argument 1 must be an array
$myclass->test_array('a string');
 
// Works: Prints the array
$myclass->test_array(array('a', 'b', 'c'));
?>

Trường hợp ta cho tham số 1 giá trị mặc định là NULL thì tham số truyền vào có thể là NULL hoặc không cần truyền tham số:

<?php
 
/* Accepting NULL value */
function test(stdClass $obj = NULL) {
 
}
 
test(NULL);
test(new stdClass);
 
?>

4 Comments to “Type hinting trong PHP”

  • Tui 16/12/2010 at 11:09 am

    Cái này sử dụng trong trường hợp nào vậy bạn? Cho mình một số vd cụ thể đc hông :)

    • datgs 11/05/2011 at 2:15 am

      Hi bạn, cái type hinting này là để giúp cho việc lập trình dễ dàng hơn, giúp bạn sử dụng được auto complete của IDE (bộ soạn code) bên trong function… Khiến cho các thành phần của chương trình ràng buộc chặt chẽ hơn… Điều này rất quan trọng khi bạn code theo design patterns trong các dự án đòi hỏi sự chính xác và rõ ràng cao.

      @admin: admin oy, blog này không hỗ trợ theo dõi nhỉ :) có comment mới mà chẳng thấy mail qua.

  • admin 10/03/2011 at 2:20 pm

    Khái niệm type hinting xuất hiện từ phiên bản php 5.1, “ép” người sử dụng hàm phải truyền vào kiểu dữ liệu đúng với ý đồ của người viết hàm

  • datgs 13/05/2011 at 2:20 pm

    Nhân thể nói về type hinting, xì pam một bài về IDE Auto Complete với CakePHP http://i-php.net/2011/05/m%E1%BA%B9o-m%E1%BB%B1c-v%E1%BB%9Bi-eclipse-pdt/

Post comment

Follow us on Twitter! Follow us on Twitter!
Diễn đàn CakePHP cho người Việt Nam

Bài viết mới

Thảo luận mới

TAG

Calendar

September 2010
M T W T F S S
« Aug   Oct »
 12345
6789101112
13141516171819
20212223242526
27282930  

Lưu trữ

Blogroll

Thống kê

5 khách