PHP陣列式訪問介面 ArrayAccess

2021-07-13 23:45:58 字數 2290 閱讀 1226

arrayaccess 是php標準庫(spl)提供的乙個介面,這意味著我們可以直接呼叫,該介面使得對物件的訪問像陣列一樣。

介面的形式大概類似於如下:

inte***ce

arrayaccess

class

test

implements

arrayaccess

public

function

offsetset

($key, $val)

public

function

offsetexists

($key)

public

function

offsetunset

($key)

public

function

offsetget

($key)

}$test = new test;

echo

$test['name']; //自動呼叫 offsetget()

$test['phone'] = 123456; //自動呼叫 offsetset()

echo

$test['phone'];

if(!isset($test['leader']))

有同學會問,像上面這種情況,php會不會自動的生成乙個 te

st陣列

來儲存這

些值,而

不是原來

的那個 test 物件?

我們可以用 var_dump() 函式來看看它的介面嘛!

var_dump($test);
返回的是:

看到沒有,現在 te

st還是

乙個物件

,而且我

們後面設

置的test[『phone』] 也進入了該物件內。

使用過 php 框架的同學應該對框架的配置檔案印象很深刻吧,那些配置檔案就是乙個陣列,然後實現配置檔案的自動載入,接下來我們模仿一下該行為:

我們建立檔案 config.php

class

config

implements

arrayaccess

//獲取陣列的key

function

offsetget

($key)

return

$this->configs[$key];

}//設定陣列的key

function

offsetset

($key, $val)

//檢測key是否存在

function

offsetexists

($key)

//刪除陣列的key

function

offsetunset

($key)

}

我們在 config.php 所在目錄下 新建目錄 configs ,並在configs 目錄下新建檔案 database.php,**如下:

<?php 

$config = array(

'mysql' => array(

'type' => 'mysql',

'host' => '127.0.0.1',

'user' => 'root',

'password' => 'root',

'dbname' => 'test',

),'sqlite' => array(

//...

),);

return

$config;

?>

使用配置:

成功獲取到配置檔案中的內容

本部落格參考自php arrayaccess(陣列式訪問)介面

慕課網

PHP中Array關於陣列的用法

使用函式array keys 得到陣列中所有的鍵,引數 陣列 arr array arr one one arr two two arr three three newarr array keys arr print r newarr array 0 one 1 two 2 three 使用函式ar...

PHP介面訪問頻率限制

發現網上很多限制都只是1分鐘 或者某個時間 內訪問的限制 比如1分鐘限制10次 那我在59秒的訪問了10次,然後key 又過期了,接下來1分鐘又可以訪問了 這種限制根本就不合理 所以有了我的想法 直接上 吧 param uid return bool int 檢測使用者介面訪問頻率 function...

php擴充套件 如何訪問php陣列

在php擴充套件中,時常需要接受php型別的陣列作為引數,php陣列的引數都是zval型別的,並不適合在擴充套件中方便的使用,一般都要提前轉換成c或cpp中的資料型別。首先看乙個轉換的例子 convert to vector const zval vals,vector string vallist...