最近用curl開發(fā)rest方式的api的時候,經(jīng)常用到j(luò)son編碼,發(fā)現(xiàn)了一個奇怪的問題。
大家應(yīng)該都知道一個數(shù)組,經(jīng)過 json_encode 然后 json_decode 以后會變成一個 對象 ,其中鍵名變成對象的屬性名,
到這里奇怪的事情要發(fā)生了,如果這個數(shù)組是數(shù)字索引的,那么就會出現(xiàn)文中的正題了。
比如下邊的這段代碼:
/*PHP Version 5.3.10*/ $a[3] = array('id'=>'3','name'=>'hello','description'=>'fasdf'); $m = json_encode($a); //echo $m; ////$m 的值是 {"3":{"id":"3","name":"hello","description":"fasdf"}}object(stdClass)#1 (1) { ["3"]=> object(stdClass)#2 (3) { ["id"]=> string(1) "3" ["name"]=> string(5) "hello" ["description"]=> string(5) "fasdf" } } $n = json_decode($m); var_dump($n); //輸出結(jié)果為object(stdClass)#1 (1) { ["3"]=> object(stdClass)#2 (3) { ["id"]=> string(1) "3" ["name"]=> string(5)"hello" ["description"]=> string(5) "fasdf" } }
看到奇怪的現(xiàn)象了吧,["3"]=> object(stdClass)#2 !
其中$n是一個對象,他有一個屬性,屬性名為3。
OK,接下來大膽假設(shè),類里邊可不可以直接定義數(shù)字屬性呢?
html' target='_blank'>class A {
public $3 = 3;
}
報錯:
Parse error: syntax error, unexpected ‘$’, expecting T_VARIABLE in t.php on line 18
再假設(shè),將屬性名偽裝:
class A {
public function __construct() {
$m = "3";
$this->$m=3;
}
}
發(fā)現(xiàn)可以成功運行,繼續(xù)修改:
class A {
public function __construct() {
$m = "3";
$this->$m=3;
}
}
$a = new A();
var_dump($a);
//輸出結(jié)果object(A)#3 (1) { ["3"]=> int(3) }
求解釋這個是什么現(xiàn)象呢?
鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯(lián)系我們修改或刪除,多謝。
新聞熱點
疑難解答
圖片精選