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