詳解PHP中instanceof關(guān)鍵字及instanceof關(guān)鍵字有什么作用
PHP5的另一個(gè)新成員是instdnceof關(guān)鍵字。使用這個(gè)關(guān)鍵字可以確定一個(gè)對(duì)象是類的實(shí)例、類的子類,還是實(shí)現(xiàn)了某個(gè)特定接口,并進(jìn)行相應(yīng)的操作。在某些情況下,我們希望確定某個(gè)類是否特定的類型,或者是否實(shí)現(xiàn)了特定的接口。instanceof操作符非常適合完成這個(gè)任務(wù)。instanceof操作符檢查三件事情:實(shí)例是否某個(gè)特定的類型,實(shí)例是否從某個(gè)特定的類型繼承,實(shí)例或者他的任何祖先類是否實(shí)現(xiàn)了特定的接口。例如,假設(shè)希望了解名為manager的對(duì)象是否為類Employee的實(shí)例:
$manager = new Employee(); … if ($manager instanceof Employee) echo "Yes";
有兩點(diǎn)值得注意。首先,類名沒(méi)有任何定界符(引號(hào))。使用定界符將導(dǎo)致語(yǔ)法錯(cuò)誤。其次,如果比較失敗,腳本將退出執(zhí)行。instanceof關(guān)鍵字在同時(shí)處理多個(gè)對(duì)象時(shí)特別有用。例如,你可能要重復(fù)地調(diào)用某個(gè)函數(shù),但希望根據(jù)對(duì)象類型調(diào)整函數(shù)的行為??梢允褂胏ase語(yǔ)句和instanceof關(guān)鍵字來(lái)實(shí)現(xiàn)這個(gè)目標(biāo)。
class test{}
class test{}
class testChilern Extends test{}
$a = new test();
$m = new test();
$i = ($m instanceof test);
if($i)
echo '$m是類test的實(shí)例!<br />'; // get this value
switch ($a instanceof test){
case true :
echo 'YES<br />';
break;
case false :
echo 'No<br />'; //get this value
break;
}
$d=new testChilern();
if($d instanceof test)echo '$d是類test的子類!<br />'; // get this value
php中 instanceof有什么作用
作用:(1)判斷一個(gè)對(duì)象是否是某個(gè)類的實(shí)例,(2)判斷一個(gè)對(duì)象是否實(shí)現(xiàn)了某個(gè)接口。
第一種用法:
<?php
$obj = new A();
if ($obj instanceof A) {
echo 'A';
}
第二種用法:
<?php
interface ExampleInterface
{
public function interfaceMethod();
}
class ExampleClass implements ExampleInterface
{
public function interfaceMethod()
{
return 'Hello World!';
}
}
$exampleInstance = new ExampleClass();
if($exampleInstance instanceof ExampleInterface){
echo 'Yes, it is';
}else{
echo 'No, it is not';
}
?>
輸出結(jié)果:Yes, it is
另外,需注意 instanceof 與 is_subclass_of() 的區(qū)別,請(qǐng)看代碼:
<?php
class Foo {
public $foobar = 'Foo';
public function test() {
echo $this->foobar . "\n";
}
}
class Bar extends Foo {
public $foobar = 'Bar';
}
$a = new Foo();
$b = new Bar();
echo "use of test() method\n";
$a->test();
$b->test();
echo "instanceof Foo\n";
var_dump($a instanceof Foo); // TRUE
var_dump($b instanceof Foo); // TRUE
echo "instanceof Bar\n";
var_dump($a instanceof Bar); // FALSE
var_dump($b instanceof Bar); // TRUE
echo "subclass of Foo\n";
var_dump(is_subclass_of($a, 'Foo')); // FALSE
var_dump(is_subclass_of($b, 'Foo')); // TRUE
echo "subclass of Bar\n";
var_dump(is_subclass_of($a, 'Bar')); // FALSE
var_dump(is_subclass_of($b, 'Bar')); // FALSE
?>
輸出結(jié)果(PHP 5.4.4):
use of test() method
Foo
Bar
instanceof Foo
bool(true)
bool(true)
instanceof Bar
bool(false)
bool(true)
subclass of Foo
bool(false)
bool(true)
subclass of Bar
bool(false)
以上內(nèi)容是本文給大家介紹的PHP中instanceof關(guān)鍵字及instanceof關(guān)鍵字有什么作用的全部?jī)?nèi)容,希望大家喜歡。
相關(guān)文章
PHP使用openssl擴(kuò)展實(shí)現(xiàn)加解密方法示例
這篇文章主要介紹了PHP使用openssl擴(kuò)展實(shí)現(xiàn)加解密方法示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-02-02
Laravel 5.1 on SAE環(huán)境開(kāi)發(fā)教程【附項(xiàng)目demo源碼】
這篇文章主要介紹了Laravel 5.1 on SAE環(huán)境開(kāi)發(fā)方法,結(jié)合實(shí)例形式詳細(xì)分析了Laravel 5.1在SAE環(huán)境下的具體開(kāi)發(fā)相關(guān)操作步驟與注意事項(xiàng),需要的朋友可以參考下2016-10-10
php 實(shí)現(xiàn)一個(gè)字符串加密解密的函數(shù)實(shí)例代碼
php開(kāi)發(fā)中,我們經(jīng)常會(huì)對(duì)字符串進(jìn)行加密解密操作,本文章向大家分享一個(gè)php字符串加密解密的函數(shù),需要的朋友可以參考一下2016-11-11
PHP safe_mode開(kāi)啟對(duì)于PHP系統(tǒng)函數(shù)有什么影響
這篇文章主要介紹了PHP safe_mode開(kāi)啟對(duì)于PHP系統(tǒng)函數(shù)有什么影響,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-11-11

