首页 > 编程 > PHP > 正文

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

2020-03-22 20:03:27
字体:
来源:转载
供稿:网友
  • 最近用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) }
    求解释这个是什么现象呢?

    PHP编程

    郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。

  • 发表评论 共有条评论
    用户名: 密码:
    验证码: 匿名发表