instanceofphp
㈠ instanceof是什麼意思
instanceof是java、php的一個二元操作符(運算符),和==,>,<是同一類東西。由於它是由字母組成的,所以也是Java的保留關鍵字。它的作用是判斷其左邊對象是否為其右邊類的實例,返回boolean類型的數據。可以用來判斷繼承中的子類的實例是否為父類的實現。相當於c#中的is操作符。java中的instanceof運算符是用來在運行時指出對象是否是特定類的一個實例。instanceof通過返回一個布爾值來指出,這個對象是否是這個特定類或者是它的子類的一個實例。
㈡ php的函數和對象到底有什麼不同啊
instanceOf 判斷一個對象是否某個類(包括繼承)的實例
class bee{}
$o = new bee();
if($o instanceOf bee){
echo 'true';
}
㈢ 關於php運算符優先順序問題
下表按照優先順序從高到低列出了運算符。同一行中的運算符具有相同優先順序,此時它們的結合方向決定求值順序。
運算符優先順序
結合方向
運算符
附加信息
無 clone new clone 和 new
左 [ array()
右 ++ -- ~ (int) (float) (string) (array) (object) (bool) @ 類型和遞增/遞減
無 instanceof 類型
右 ! 邏輯運算符
左 * / % 算術運算符
左 + - . 算術運算符和字元串運算符
左 << >> 位運算符
無 == != === !== <> 比較運算符
左 & 位運算符和引用
左 ^ 位運算符
左 | 位運算符
左 && 邏輯運算符
左 || 邏輯運算符
左 ? : 三元運算符
右 = += -= *= /= .= %= &= |= ^= <<= >>= => 賦值運算符
左 and 邏輯運算符
左 xor 邏輯運算符
左 or 邏輯運算符
左 , 多處用到
對具有相同優先順序的運算符,左結合方向意味著將從左向右求值,右結合方向則反之。對於無結合方向具有相同優先順序的運算符,該運算符有可能無法與其自身結合。
㈣ 什麼是PHP單例模式
PHP單例模式,就是一個對象只被生成一次,但該對象可以被其它眾多對象使用。單例模式使用最多的場景,是資料庫連接操作。我們知道,生成一個對象的操作是用new函數來實現,但是new對象都會消耗內存,而且有時候對同一個對象,在不同文件中可能會生成多次,這就造成了系統資源的浪費。然而使用單例模式,則可以很好的避免這種情況。
以資料庫為例,假設我們有一個資料庫的類,要實現資料庫連接。如果不使用單例模式,那麼在很多PHP文件中,我們可能到要創建這樣的一個連接,這其實是對資源的很大浪費。那麼下面介紹單例模式實現方法:
classDatabase
{
//定義一個屬性,該屬性是靜態的保護或私有屬性
protectedstatic$db;
//這里構造函數一定要是私有方法
privatefunction__construct()
{
}
//聲明一個獲取類實例的方法
staticfunctiongetInstace()
{
if(self::$db){
returnself::$db;
}else{
//生成自己
self::$db=newself();
returnself::$db;
}
}
}
//錯誤調用方法
//用new實例化private標記構造函數的類會報錯
$db=newDatabase();
//正確獲取實例方法
$db=Database::getInstace();
使用單例模式的好處是,當你在其他地方也要使用到這個類,比如上面的資料庫類。那麼你可以在其它地方直接調用Database::getInstace(),而且該實例只會被生成一次,不會被重復生成,所以不會浪費系統資源。
簡單的說,單例模式生成的實例只被生成一次,而且只負責一個特定的任務。
使用單例模式有下面幾個要求:
1.構造函數需要標記為private(訪問控制:防止外部代碼使用new操作符創建對象),單例類不能在其他類中實例化,只能被其自身實例化;
2.擁有一個保存類的實例的靜態成員變數;
3.擁有一個訪問這個實例的公共的靜態方法(常用getInstance()方法進行實例化單例類,通過instanceof操作符可以檢測到類是否已經被實例化);
4.如果嚴謹的話,還需要創建__clone()方法防止對象被復制(克隆)。(我上面沒創建)
使用單例模式好處,總結:
1、php的應用主要在於資料庫應用, 所以一個應用中會存在大量的資料庫操作, 使用單例模式, 則可以避免大量的new 操作消耗的資源。
2、如果系統中需要有一個類來全局控制某些配置信息, 那麼使用單例模式可以很方便的實現. 這個可以參看ZF的FrontController部分。
3、在一次頁面請求中, 便於進行調試。
參考:http://coderschool.cn/1523.html
㈤ php中 instanceof有什麼用
作用:(1)判斷一個對象是否是某個類的實例,(2)判斷一個對象是否實現了某個介面。
第一種用法:
<?php
$obj=newA();
if($objinstanceofA){
echo'A';
}
第二種用法:
<?php
interfaceExampleInterface
{
publicfunctioninterfaceMethod();
}
{
publicfunctioninterfaceMethod()
{
return'HelloWorld!';
}
}
$exampleInstance=newExampleClass();
if($){
echo'Yes,itis';
}else{
echo'No,itisnot';
}
?>
輸出結果:Yes,itis
另外,需注意 instanceof 與 is_subclass_of() 的區別,請看代碼:
<?php
classFoo{
public$foobar='Foo';
publicfunctiontest(){
echo$this->foobar." ";
}
}
classBarextendsFoo{
public$foobar='Bar';
}
$a=newFoo();
$b=newBar();
echo"useoftest()method ";
$a->test();
$b->test();
echo"instanceofFoo ";
var_mp($ainstanceofFoo);//TRUE
var_mp($binstanceofFoo);//TRUE
echo"instanceofBar ";
var_mp($ainstanceofBar);//FALSE
var_mp($binstanceofBar);//TRUE
echo"subclassofFoo ";
var_mp(is_subclass_of($a,'Foo'));//FALSE
var_mp(is_subclass_of($b,'Foo'));//TRUE
echo"subclassofBar ";
var_mp(is_subclass_of($a,'Bar'));//FALSE
var_mp(is_subclass_of($b,'Bar'));//FALSE
?>
輸出結果(PHP5.4.4):
useoftest()method
Foo
Bar
instanceofFoo
bool(true)
bool(true)
instanceofBar
bool(false)
bool(true)
subclassofFoo
bool(false)
bool(true)
subclassofBar
bool(false)
㈥ PHP的預定義介面都有哪些,都是這么使用的
介面是為解決PHP中無法進行多重繼承的問題而設置的,只聲明API,而沒有實現API,放在實現的類中去完成這個API的具體實現。
介面的聲明關鍵字為interface,如下代碼就是聲明一個介面
interface IExampleInterface{
function myfunction();
}
如下代碼使用這個介面
class myClass implements IExampleInterface{
function myfunction(){
echo "myfunction is called";
}
}
也可以使用多個介面
class myClass implements IExampleInterface,AnotherIExampleInterface{
//code
}
必須將介面中的myfunction函數進行實現,否則會提示錯誤
此外,instanceof操作符,用來判斷某個對象是否實現了某個特定的介面
$a = myClass();
$flag = $a instanceof IExampleInterface;
echo $flag;將輸出1,否則為0~
還有不明白的可以發消息給我
㈦ java中instanceof怎麼用
instanceof在java、php中是一個二元運算符。語法:boolean result=object instanceof class 。用來判斷Obect 是否是class類型的。如果是返回true,如果不是返回false,也可以不去接收結果。例如:
String a="abc";
boolean flag=a instanceof String;
System.out.print(flag);
結果:true
㈧ PHP設計模式之單例模式
單例模式
:使得類的一個對象成為系統中的唯一實例.
PHP中使用單例模式最常見的就是資料庫操作了。避免在系統中有多個連接資料庫的操作,浪費系統資源的現象,就可以使用單例模式。每次對資料庫操作都使用一個實例。
簡單示例
class
AClass
{
//
用來存儲自己實例
public
static
$instance;
//
私有化構造函數,防止外界實例化對象
private
function
__construct()
{}
//
私有化克隆函數,防止外界克隆對象
private
function
__clone()
{}
//
靜態方法,單例訪問統一入口
public
static
function
getInstance()
{
if
(!(self::$instance
instanceof
self)){
self::$instance
=
new
self();
}
return
self::$instance;
}
//
test
public
function
test()
{
return
"done";
}
//
私有化克隆函數,防止外界克隆對象
private
function
__clone()
{}
}
class
BClass
extends
AClass{
}
//
獲取實例
$aclass
=
AClass::getInstance();
$bclass
=
BClass::getInstance();
//
調用方法
echo
$aclass->test();
對一些比較大型的應用來說,可能連接多個資料庫,那麼不同的資料庫公用一個對象可能會產生問題,比如連接句柄的分配等,我們可以通過給$instance變成數組,通過不同的參數來控制
簡單示例
class
DB
{
//
用來存儲自己實例
public
static
$instance
=
array();
public
$conn;
//
私有化構造函數,防止外界實例化對象
private
function
__construct($host,
$username,
$password,
$dbname,
$port)
{
$this->conn
=
new
mysqli($host,
$username,
$password,
$dbname,
$port);
}
//
靜態方法,單例訪問統一入口
public
static
function
getInstance($host,
$username,
$password,
$dbname,
$port)
{
$key
=
$host.":".$port;
if
(!(self::$instance[$key]
instanceof
self)){
self::$instance[$key]
=
new
self($host,
$username,
$password,
$dbname,
$port);#實例化
}
return
self::$instance[$key];
}
//query
public
function
query($ql)
{
return
$this->conn->query($sql);
}
//
私有化克隆函數,防止外界克隆對象
private
function
__clone()
{}
//釋放資源
public
function
__destruct(){
$this->conn->close();
}
}
㈨ 詳解PHP中instanceof關鍵字及instanceof關鍵字有什麼作用
PHP5的另一個新成員是instdnceof關鍵字。使用這個關鍵字可以確定一個對象是類的實例、類的子類,還是實現了某個特定介面,並進行相應的操
作。在某些情況下,我們希望確定某個類是否特定的類型,或者是否實現了特定的介面。instanceof操作符非常適合完成這個任務。
instanceof操作符檢查三件事情:實例是否某個特定的類型,實例是否從某個特定的類型繼承,實例或者他的任何祖先類是否實現了特定的介面。例如,
假設希望了解名為manager的對象是否為類Employee的實例:
$manager=newEmployee();
…
if($managerinstanceofEmployee)
echo"Yes";
有兩點值得注意。首先,類名沒有任何定界符(引號)。使用定界符將導致語法錯誤。其次,如果比較失敗,腳本將退出執行。instanceof關鍵字在同時
處理多個對象時特別有用。例如,你可能要重復地調用某個函數,但希望根據對象類型調整函數的行為。可以使用case語句和instanceof關鍵字來實
現這個目標。
classtest2{}
classtest{}
classtestChilernExtendstest{}
$a=newtest2();
$m=newtest();
$i=($minstanceoftest);
if($i)
echo'$m是類test的實例!<br/>';//getthisvalue
switch($ainstanceoftest){
casetrue:
echo'YES<br/>';
break;
casefalse:
echo'No<br/>';//getthisvalue
break;
}
$d=newtestChilern();
if($dinstanceoftest)echo'$d是類test的子類!<br/>';//getthisvalue
php中 instanceof有什麼作用
作用:(1)判斷一個對象是否是某個類的實例,(2)判斷一個對象是否實現了某個介面。
第一種用法:
<?php
$obj=newA();
if($objinstanceofA){
echo'A';
}
第二種用法:
<?php
interfaceExampleInterface
{
publicfunctioninterfaceMethod();
}
{
publicfunctioninterfaceMethod()
{
return'HelloWorld!';
}
}
$exampleInstance=newExampleClass();
if($){
echo'Yes,itis';
}else{
echo'No,itisnot';
}
?>
輸出結果:Yes, it is
另外,需注意 instanceof 與 is_subclass_of() 的區別,請看代碼:
lassFoo{public$foobar='Foo';
publicfunctiontest(){
echo$this->foobar." ";
}
}
classBarextendsFoo{
public$foobar='Bar';
}
$a=newFoo();
$b=newBar();
echo"useoftest()method ";
$a->test();
$b->test();
echo"instanceofFoo ";
var_mp($ainstanceofFoo);//TRUE
var_mp($binstanceofFoo);//TRUE
echo"instanceofBar ";
var_mp($ainstanceofBar);//FALSE
var_mp($binstanceofBar);//TRUE
echo"subclassofFoo ";
var_mp(is_subclass_of($a,'Foo'));//FALSE
var_mp(is_subclass_of($b,'Foo'));//TRUE
echo"subclassofBar ";
var_mp(is_subclass_of($a,'Bar'));//FALSE
var_mp(is_subclass_of($b,'Bar'));//FALSE
?>