日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > php >内容正文

php

php arrayaccess什么作用,PHP中的ArrayAccess用法详解

發布時間:2023/12/16 php 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 php arrayaccess什么作用,PHP中的ArrayAccess用法详解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在Laravel的源碼當中,作者多次使用到了PHP SPL中的ArrayAccess接口,那么這個ArrayAccess接口到底有什么作用呢?我會用一個簡單的例子跟大家說明。

請看下面的這段代碼,Foo類實現了ArrayAccess接口中的四個方法,請仔細看這些方法內部的實現代碼。看到了嗎?這些代碼是干什么用的,回答就是這些代碼沒有用,隨便你怎么寫,你想寫什么就寫什么。接口中這四個方法的內部的實現跟方法名字其實沒有任何關系。啊!這。。。實際的作用是取決于你的調用。

class Foo implements ArrayAccess

{

public function offsetExists( $offset ) {

echo "這里是 offsetExists() 方法 你輸入的參數是 {$offset}";

}

public function offsetGet( $offset ) {

echo "這里是 offsetGet() 方法 你輸入的參數是 $offset";

}

public function offsetSet( $offset, $value ) {

echo "這里是 offsetSet() 方法 你輸入的 {$offset}={$value}";

}

public function offsetUnset( $offset ) {

echo "這里是 offsetUnset() 方法 你輸入的參數是 {$offset}";

}

}

好,我們調用一下看看。

我們使用isset這個函數去調用$foo['how'],那么實際上是調用了offsetExists這個方法,也就是說 $foo['xxxx'] 這種結構去調用哪個ArrayAccess的方法是取決于你是如何調用的 $foo['xxxx']。而方法內部的實現代碼你想怎么寫就怎么寫。在這里一旦你使用isset去調用了這種結構,系統就會去調用offsetExists這個方法,在本例中方法里面有什么,僅僅是echo了一句話。為什么?var_dump($t);?會輸出false呢?因為在我們實現的這個offsetExists方法里面,沒有任何的返回值,沒有返回值當然就是null了,也就是false了。

$foo = new Foo();

$t = isset($foo['how']);// 輸出: 這里是 offsetExists() 方法 你輸入的參數是 how

var_dump($t);// 輸出: boolean false

接著看看這種?$foo['xxxx'] 結構還可以怎樣被調用,不如我們這次直接使用$foo['xxxx']看看。原來直接使用?$foo['xxxx'] ?這種結構也可以調用一個方法啊,從輸出當中得知調用了offsetGet方法,同樣也獲取到了參數。

$foo = new Foo();

$foo['what'];// 輸出: 這里是 offsetGet() 方法 你輸入的參數是 what

繼續看還能怎么調用到其他的方法,我們給這個結構賦值看看,果然賦值的操作當然是調用offsetSet方法了,同樣的方法內部的實現代碼任然還是你想寫什么就寫什么。

$foo = new Foo();

$foo['when'] = 'today';// 輸出: 這里是 offsetSet() 方法 你輸入的 when=today

最后一個了,看方法名字也知道是通過unset方法才能被調用了。

$foo = new Foo();

unset($foo['wow']);// 輸出: 這里是 offsetUnset() 方法 你輸入的參數是 wow

總結

好了,總結一下吧:

如果你的類實現了ArrayAccess接口,那么這個類的對象就可以使用$foo['xxx']這種結構了。

$foo['xxx'] 對應調用offsetGet方法。

$foo['xxx'] = 'yyy' 對應調用offsetSet方法。

isset($foo['xxx']) 對應調用offsetExists方法。

unset($foo['xxx']) 對應調用offsetUnset方法。

再次強調,方法的實現代碼,你想怎么寫就怎么寫。(當然代碼的功能最好是貼近方法名啦)

原創內容,禁止轉載!

C#中string.format用法詳解

C#中string.format用法詳解 本文實例總結了C#中string.format用法.分享給大家供大家參考.具體分析如下: String.Format 方法的幾種定義: String.Form ...

c++中vector的用法詳解

c++中vector的用法詳解 vector(向量): C++中的一種數據結構,確切的說是一個類.它相當于一個動態的數組,當程序員無法知道自己需要的數組的規模多大時,用其來解決問題可以達到最大節約空間 ...

php中setcookie函數用法詳解(轉)

php中setcookie函數用法詳解:??? ??? php手冊中對setcookie函數講解的不是很清楚,下面是我做的一些整理,歡迎提出意見.??? ??? 語法:??? ??? bool set ...

JavaScript中return的用法詳解

JavaScript中return的用法詳解 最近,跟身邊學前端的朋友了解,有很多人對函數中的this的用法和指向問題比較模糊,這里寫一篇博客跟大家一起探討一下this的用法和指向性問題. 1定義 t ...

Mysql中limit的用法詳解

Mysql中limit的用法詳解 在我們使用查詢語句的時候,經常要返回前幾條或者中間某幾行數據,為我們提供了limit這樣一個功能. SELECT * FROM table LIMIT [offset ...

JavaScript中this的用法詳解

JavaScript中this的用法詳解 最近,跟身邊學前端的朋友了解,有很多人對函數中的this的用法和指向問題比較模糊,這里寫一篇博客跟大家一起探討一下this的用法和指向性問題. 1定義 thi ...

(轉)Shell中read的用法詳解

Shell中read的用法詳解 原文:http://blog.csdn.net/jerry_1126/article/details/77406500 read的常用用法如下: read -[pstn ...

(轉)linux 中特殊符號用法詳解

linux 中特殊符號用法詳解 原文:https://www.cnblogs.com/lidabo/p/4323979.html #?井號 (comments)#管理員??$普通用戶 腳本中 #!/b ...

CentOS 7.X 中systemctl命令用法詳解

systemctl是RHEL 7 的服務管理工具中主要的工具,它融合之前service和chkconfig的功能于一體.可以使用它永久性或只在當前會話中啟用/禁用服務,下面來看CentOS 7.X 中 ...

隨機推薦

linux操作命令

cd / 回到跟目錄 cd .. ?返回上一層目錄 tomcat 的logs目錄執行tail -f catalina.out查看日志 ps -ef|grep tomcat 查看tomcat進程 kil ...

Go語言實現簡單的一個靜態WEB服務器

package main import ( "net/http" ) func main() { http.Handle("/", http.FileServe ...

東大OJ-1588: Routing Table

題目描述 In the computer network, a Router is a device which finds an optimal way to transmit the datagr ...

BZOJ1107 : [POI2007]駕駛考試egz

i可以作為起點說明把邊反向后可以從1和n到達i. 設fl[i]表示從1到達i至少需要加幾條邊,fr[i]表示從n到達i至少需要加幾條邊. 把圖上下翻轉后,從左往右依次計算fl[i],有fl[i]=i- ...

JavaScript實現彈框

提起JS彈框,我首先想到的是Alert,然后想到的還是Alert,最后我竟然就只知道Alert.然后面試就死在這個Alert上了.惱火. 根據網上各位大神的總結,我整理了一下,也順便學習了一下. 一. ...

圖解zookeeper FastLeader選舉算法

zookeeper當配置為群集模式,在啟動或異常情況將被選舉為的例子Leader.默認選擇算法FastLeaderElection. 不知道zookeeper夠考慮這樣一個問題:某個服務能夠配置為多個 ...

【轉】TCP/IP協議中TCP和UDP的區別

TCP協議與UDP協議的區別? ??首先咱們弄清楚,TCP協議和UCP協議與TCP/IP協議的聯系,很多人犯糊涂了,一直都是說TCP/IP協議與UDP協議的區別,我覺得這是沒有從本質上弄清楚網絡通信! ...

MS SQL 事物日志傳送能否跨數據庫版本嗎?

SQL SERVER的事物日志傳送(log shipping)功能,相信很多人都使用過或正在應用,這是MS SQL提供的一個非常強大的功能,一般需要一個主數據庫服務器(primary/producti ...

[轉]tomcat啟動報錯too low setting for -Xss

tomcat啟動報錯too low setting for -Xss 網上給的答案都是調整Xss參數,其實不是正確的做法, -Xss:每個線程的Stack大小,“-Xss 15120” 這使得tomc ...

基于TensorFlow的MNIST數據集的實驗

一.MNIST實驗內容 MNIST的實驗比較簡單,可以直接通過下面的程序加上程序上的部分注釋就能很好的理解了,后面在完善具體的相關的數學理論知識,先記錄在這里: 代碼如下所示: import tens ...

總結

以上是生活随笔為你收集整理的php arrayaccess什么作用,PHP中的ArrayAccess用法详解的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。