php的instanceof是什么意思?instanceof由兩個單詞組成,instance和of,instance表示實例的意思,從字面上就可以理解這是實例引用的意思,instanceof是PHP5引入的新關鍵字.
instanceof 運算符是 PHP 5 引進的,在此之前用 is_a(),但是 is_a() 已經過時了,最好用 instanceof.
1、用來確定一個變量是否屬于某個類的實例;
2、用來確定一個變量是否是繼承自某一父類的子類的實例;
3、用來確定一個變量是否是實現了某個接口的對象的實例。
在 PHP 5.1.0之前,如果要檢查的類名稱不存在,instanceof 會調用 __autoload(),另外,如果該類沒有被裝載則會產生一個致命錯誤,可以通過使用動態類引用(dynamic class reference)或用一個包含類名的字符串變量來避開這種問題.
下面舉例說明php instanceof的用法:
- if ( ! emptyempty( $current_user ) ) {
- if ( $current_user instanceof WP_User )
- return;
- // Upgrade stdClass to WP_User
- if ( is_object( $current_user ) && isset( $current_user->ID ) ) {
- $cur_id = $current_user->ID;
- $current_user = null;
- wp_set_current_user( $cur_id );
- return; //開源軟件:Vevb.com
- }
- // $current_user has a junk value. Force to WP_User with ID 0.
- $current_user = null;
- wp_set_current_user( 0 );
- return false;
- }
如代碼中高亮的部分,if ( $current_user instanceof WP_User),WP_User是一個類名,在這里這句話是判斷$current_user是否是WP_User這個類的實例,也就是判斷前面的代碼中是否已經有$current_user=new WP_User().
使用instanceof這個關鍵字可以確定一個對象是類的實例、類的子類,還是實現了某個特定接口,并進行相應的操作.
Example #6 避免 PHP 5.0 中 instanceof 引起的類名查找和致命錯誤問題.
- <?php
- $d = 'NotMyClass';
- var_dump($a instanceof $d); // no fatal error here
- ?>
代碼格式:實例名 instanceof 類名
instanceof 運算符的運用
如下例子可以運行:
- <?php
- class User{
- private $name;
- public function getName(){
- return "UserName is ".$this->name;
- }
- }
- class NormalUser extends User {
- private $age = 99;
- public function getAge(){
- return "age is ".$this->age;
- }
- }
- class UserAdmin{ //操作.
- public static function getUserInfo(User $_user){
- echo $_user->getAge();
- }
- }
- $normalUser = new NormalUser();
- UserAdmin::getUserInfo($normalUser);
- ?>
- //程序運行結果:
- age is 99
在User類中因為沒有這個方法而報錯:
- <?php
- class User{
- private $name;
- public function getName(){
- return "UserName is ".$this->name;
- }
- }
- class NormalUser extends User {
- private $age = 99;
- public function getAge(){
- return "age is ".$this->age;
- }
- }
- class UserAdmin{ //操作.
- public static function getUserInfo(User $_user){
- echo $_user->getAge();
- }
- }
- $User = new User(); // 這里new的是User.
- UserAdmin::getUserInfo($User);
- ?>
程序運行結果:Fatal error: Call to undefined method User::getAge() in E:\PHPProjects\NowaMagic\php\php_InstanceofOperator.php on line 99
使用instatnceof運算符保障代碼安全,使用instatnceof運算符,在操作前先進行類型判斷,以保障代碼的安全性.
- <?php
- class User{
- private $name;
- public function getName(){
- return "UserName is ".$this->name;
- }
- }
- class NormalUser extends User {
- private $age = 99;
- public function getAge(){
- return "age is ".$this->age;
- }
- }
- class UserAdmin{ //操作.
- public static function getUserInfo(User $_user){
- if($_user instanceof NormalUser ){
- echo $_user->getAge();
- }else{
- echo "類型不對,不能使用這個方法.";
- }
- }
- }
- $User = new User(); // 這里new的是User.
- UserAdmin::getUserInfo($User);
- ?>
程序運行結果:類型不對,不能使用這個方法.
這就是php關鍵字instanceof的用法.
新聞熱點
疑難解答