网站地图    收藏   

主页 > 后端 > php资料库 >

php中类的属性居然可以为数字?_自学php网

来源:自学PHP网    时间:2014-12-04 22:12 作者: 阅读:

[导读] 最近用curl开发rest方式的api的时候,经常用到json编码,发现了一个奇怪的问题。 大家应该都知道一个数组,经过 json_encode 然后 json_decode 以后会变成一个 对象 ,其中键名变成对象的属性...

最近用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网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习

京ICP备14009008号-1@版权所有www.zixuephp.com

网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com

添加评论