我记得在某处读过这段代码:
<?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
是通过这样做声明的,但我不认为这是你用这种方式编码的唯一原因。
答案 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:
类成员变量称为“属性”。 [...]他们是定义的 使用其中一个关键字
public
,protected
或private
, 然后是正常的变量声明。 [...]为了保持与PHP 4的向后兼容性,PHP 5将会 仍然接受在属性声明中使用关键字
var
代替(或除了)public
,protected
或private
。如果你 使用var
声明一个属性,然后PHP 5将该属性视为已声明为public
。
换句话说,除非你使用var
,否则PHP中没有default access modifier
(或no access modifier
的特殊处理)成员变量 。是的,这是一种不一致 - 因为成员函数可以在没有访问修饰符的情况下定义(在这种情况下,它们被处理为public
)。
...那就是,顺便说一下,这个令人困惑的unexpected T_VARIABLE, expecting T_FUNCTION
错误信息的原因;最后,$foo = 6
语句被视为函数声明。