相必大家都知道 stdClass 類,
這這可看成是php5的一個(gè)基類, 提供了類似于數(shù)組的調(diào)用方法
可以通過(guò)顯式的方法將一個(gè)數(shù)組轉(zhuǎn)換成stdClass,然后通過(guò)用對(duì)像的方式訪問(wèn)
復(fù)制PHP內(nèi)容到剪貼板
PHP代碼:
$a = new stdClass();
$a->b = 1;
echp $a->b; // output:1
// arr->obj
$arr = array('a','b');
$obj = (object)$arr;
為什么不用數(shù)組呢? 對(duì)于PHP來(lái)說(shuō)用數(shù)組不是更方便嗎?
1. 我喜歡用對(duì)像的調(diào)用方式,寫起來(lái)方便,順暢
2. 數(shù)組是COPY值,對(duì)像是能過(guò)引用的
3. 可以實(shí)現(xiàn)一些特殊的功能,(全局靜態(tài)變量,這個(gè)以后再說(shuō))
但是對(duì)于多維數(shù)組呢? 我們不能就這樣的轉(zhuǎn)換,
下面這個(gè)類.將會(huì)實(shí)現(xiàn)這樣的方法,
至于可以用在什么地方.大家可以發(fā)揮
復(fù)制PHP內(nèi)容到剪貼板
PHP代碼:
$data = array('a1'=>array('b1'=>'b1value','b2'=>'b2value','b3'=>'b3value'));
$data = new map($data);
// OBJ 取值
echo $data->a1->b1; // output: b1value
// OBJ 賦值
$data->a1->b2 = 'newb2value';
echo '<br>'.$data->a1->b2; //output: newb2value
// ARRAY 取值
echo '<br>'.$data['a1']['b3']; //output: b3value
// FOREACH 循環(huán)
// output: b1=>b1value b2=>newb2value b3=>b3value
foreach($data->a1 as $key=>$val){
echo '<br>'.$key.'=>'.$val;
}
class map
復(fù)制PHP內(nèi)容到剪貼板
PHP代碼:
class map extends ArrayObject{
// 獲取 arrayobject 因子
public function __construct(array $array = array()){
foreach ($array as &$value){
is_array($value) && $value = new self($value);
}
parent::__construct($array);
}
// 取值
public function __get($index){
return $this->offsetGet($index);
}
// 賦值
public function __set($index, $value){
is_array($value) && $value = new self($value);
$this->offsetSet($index, $value);
}
// 是否存在
public function __isset($index){
return $this->offsetExists($index);
}
// 刪除
public function __unset($index){
$this->offsetUnset($index);
}
// 轉(zhuǎn)換為數(shù)組類型
public function toArray(){
$array = $this->getArrayCopy();
foreach ($array as &$value){
($value instanceof self) && $value = $value->toArray();
}
return $array;
}
// 打印成字符
public function __toString(){
return var_export($this->toArray(), true);
}
// 根據(jù)索引賦值
public function put($index,$value){
is_array($value) && $value = new self($value);
$this->offsetSet($index, $value);
}
// 根據(jù)索引取值
public function get($index){
return $this->offsetGet($index);
}
}
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注