公共变量中的逗号

时间:2012-11-24 16:13:13

标签: php

我记得在某处读过这段代码:

<?php

class test {
    public $foo = 6, $bar;
}

$a = new test();
echo $a->foo; //6
echo $a->bar; //no output

逗号在public $foo = 6, $bar;中的作用是什么?当我删除public时,为什么我的IDE会出错?我确实发现$bar是通过这样做声明的,但我不认为这是你用这种方式编码的唯一原因。

2 个答案:

答案 0 :(得分:4)

逗号在功能上与:

相同
<?php
class test {
    public $foo = 6;
    public $bar;
}

$a = new test();
echo $a->foo; //6
echo $a->bar; //no output

基本上,它只是意味着声明另一个公共变量。如果删除public,则不再声明公共变量,因此IDE会抱怨。人们编码的原因是为了节省空间。这只是一个较长形式的简写。

答案 1 :(得分:3)

  

逗号在公共场合做了什么$ foo = 6,$ bar;?

它允许您声明两个类属性 - $foo(默认值为6)和$bar(默认值为null) - 使用相同的访问修饰符 - public - 不重复两次,例如:

public $foo = 6;
public $bar;

顺便说一句,no output是将此null值转换为字符串(空字符串)的结果。

  

为什么在删除公开时我的IDE会出错?

因为如果不指定其访问修饰符,则无法指定属性。引用doc

  

类成员变量称为“属性”。 [...]他们是定义的   使用其中一个关键字publicprotectedprivate,   然后是正常的变量声明。 [...]

     

为了保持与PHP 4的向后兼容性,PHP 5将会   仍然接受在属性声明中使用关键字var   代替(或除了)publicprotectedprivate。如果你   使用var声明一个属性,然后PHP 5将该属性视为已声明为public

换句话说,除非你使用var,否则PHP中没有default access modifier(或no access modifier的特殊处理)成员变量 。是的,这是一种不一致 - 因为成员函数可以在没有访问修饰符的情况下定义(在这种情况下,它们被处理为public)。

...那就是,顺便说一下,这个令人困惑的unexpected T_VARIABLE, expecting T_FUNCTION错误信息的原因;最后,$foo = 6语句被视为函数声明。