我记得在某处读过这段代码:
<?php
class test {
public $foo = 6, $bar;
}
$a = new test();
echo $a->foo; //6
echo $a->bar; //no output
逗号有什么作用public $foo = 6, $bar;
?为什么我的 IDE 在我删除时给我错误public
?我确实发现$bar
这样做是声明的,但我认为这不是你以这种方式编码的唯一原因。
我记得在某处读过这段代码:
<?php
class test {
public $foo = 6, $bar;
}
$a = new test();
echo $a->foo; //6
echo $a->bar; //no output
逗号有什么作用public $foo = 6, $bar;
?为什么我的 IDE 在我删除时给我错误public
?我确实发现$bar
这样做是声明的,但我认为这不是你以这种方式编码的唯一原因。
逗号在功能上与以下内容相同:
<?php
class test {
public $foo = 6;
public $bar;
}
$a = new test();
echo $a->foo; //6
echo $a->bar; //no output
基本上,它只是意味着声明另一个公共变量。如果您删除 public,您将不再声明一个公共变量,因此您的 IDE 会抱怨。人们以这种方式编码的原因是为了节省空间。它只是较长形式的简写。
public $foo = 6, $bar; 中的逗号有什么作用?
它允许你声明两个类属性—— $foo
(默认值为 6)和$bar
(默认值null
)——使用相同的访问修饰符——public
无需重复两次,如下所示:
public $foo = 6;
public $bar;
顺便说一句,no output
是将此null
值转换为字符串(空字符串)的结果。
为什么我的 IDE 在我删除 public 时给我错误?
因为你不能指定一个属性而不指定它的访问修饰符。引用文档:
类成员变量称为“属性”。[...] 它们是通过使用关键字
public
、protected
或之一来定义的private
,然后是普通的变量声明。[...]为了保持与 PHP 4 的向后兼容性,PHP 5 仍将接受
var
在属性声明中使用关键字来代替(或除此之外)public
、protected
或private
. 如果您声明一个属性 usingvar
,那么 PHP 5 将把该属性视为已声明为public
.
换句话说,除非您使用var
,否则 PHP 中没有像default access modifier
(或特殊处理no access modifier
)成员变量这样的东西。是的,这是一种不一致 - 因为可以在没有访问修饰符的情况下定义成员函数(在这种情况下,它们被处理为public
)。
...顺便说一句,这就是那个令人困惑的unexpected T_VARIABLE, expecting T_FUNCTION
错误消息的原因;最后,该$foo = 6
语句被视为函数声明。