好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

php中类的属性居然可以为数字?

最近用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,接下来大胆假设,类里边可不可以直接定义数字属性呢?

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) } 求解释这个是什么现象呢?

查看更多关于php中类的属性居然可以为数字?的详细内容...

  阅读:46次