Kiểm tra loại PHP

Để kiểm tra xem một số đối tượng có thuộc một lớp nhất định hay không, toán tử [nhị phân] instanceof có thể được sử dụng kể từ phiên bản PHP 5

Tham số đầu tiên [bên trái] là đối tượng cần kiểm tra. Nếu biến này không phải là một đối tượng, thì instanceof luôn trả về false. Nếu một biểu thức không đổi được sử dụng, một lỗi sẽ được đưa ra

Tham số thứ hai [bên phải] là lớp để so sánh với. Lớp có thể được cung cấp dưới dạng chính tên lớp, một biến chuỗi chứa tên lớp [không phải là hằng chuỗi. ] hoặc một đối tượng của lớp đó

class MyClass {
}

$o1 = new MyClass[];
$o2 = new MyClass[];
$name = 'MyClass';

// in the cases below, $a gets boolean value true
$a = $o1 instanceof MyClass;
$a = $o1 instanceof $name;
$a = $o1 instanceof $o2;

// counter examples:
$b = 'b';
$a = $o1 instanceof 'MyClass'; // parse error: constant not allowed
$a = false instanceof MyClass; // fatal error: constant not allowed
$a = $b instanceof MyClass;    // false [$b is not an object]

instanceof cũng có thể được sử dụng để kiểm tra xem một đối tượng có thuộc một lớp nào đó mở rộng một lớp khác hay thực hiện một số giao diện

interface MyInterface {
}

class MySuperClass implements MyInterface {
}

class MySubClass extends MySuperClass {
}

$o = new MySubClass[];

// in the cases below, $a gets boolean value true    
$a = $o instanceof MySubClass;
$a = $o instanceof MySuperClass;
$a = $o instanceof MyInterface;

Để kiểm tra xem một đối tượng không thuộc một lớp nào đó, có thể sử dụng toán tử not [!]

class MyClass {
}

class OtherClass {
}

$o = new MyClass[];
$a = !$o instanceof OtherClass; // true

Lưu ý rằng dấu ngoặc đơn xung quanh $o instanceof MyClass là không cần thiết vì instanceof có độ ưu tiên cao hơn !, mặc dù nó có thể làm cho mã dễ đọc hơn với dấu ngoặc đơn

Hãy cẩn thận

Nếu một lớp không tồn tại, các chức năng tự động tải đã đăng ký được gọi để cố gắng xác định lớp [đây là một chủ đề nằm ngoài phạm vi của phần này của Tài liệu. ]. Trong các phiên bản PHP trước 5. 1. 0, toán tử instanceof cũng sẽ kích hoạt các cuộc gọi này, do đó thực sự xác định lớp [và nếu lớp không thể được xác định, một lỗi nghiêm trọng sẽ xảy ra]. Để tránh điều này, hãy sử dụng một chuỗi

// only PHP versions before 5.1.0!
class MyClass {
}

$o = new MyClass[];
$a = $o instanceof OtherClass; // OtherClass is not defined!
// if OtherClass can be defined in a registered autoloader, it is actually
// loaded and $a gets boolean value false [$o is not a OtherClass]
// if OtherClass can not be defined in a registered autoloader, a fatal
// error occurs.

$name = 'YetAnotherClass';
$a = $o instanceof $name; // YetAnotherClass is not defined!
// $a simply gets boolean value false, YetAnotherClass remains undefined.

Kể từ phiên bản PHP 5. 1. 0, trình tải tự động đã đăng ký không được gọi nữa trong những tình huống này

Các phiên bản cũ hơn của PHP [trước 5. 0]

Trong các phiên bản PHP cũ hơn [trước 5. 0], hàm

interface MyInterface {
}

class MySuperClass implements MyInterface {
}

class MySubClass extends MySuperClass {
}

$o = new MySubClass[];

// in the cases below, $a gets boolean value true    
$a = $o instanceof MySubClass;
$a = $o instanceof MySuperClass;
$a = $o instanceof MyInterface;
3 có thể được sử dụng để xác định xem một đối tượng có thuộc loại nào đó hay không. Hàm này không được dùng trong phiên bản PHP 5 và không được dùng trong phiên bản PHP 5. 3. 0

Trong khi hàm 

Chủ Đề