2

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

<?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这样做是声明的,但我认为这不是你以这种方式编码的唯一原因。

4

2 回答 2

4

逗号在功能上与以下内容相同:

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

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

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

于 2012-11-24T16:16:19.190 回答
3

public $foo = 6, $bar; 中的逗号有什么作用?

它允许你声明两个类属性—— $foo(默认值为 6)和$bar(默认值null)——使用相同的访问修饰符——public无需重复两次,如下所示:

public $foo = 6;
public $bar;

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

为什么我的 IDE 在我删除 public 时给我错误?

因为你不能指定一个属性而不指定它的访问修饰符。引用文档

类成员变量称为“属性”。[...] 它们是通过使用关键字publicprotected或之一来定义的private,然后是普通的变量声明。[...]

为了保持与 PHP 4 的向后兼容性,PHP 5 仍将接受var在属性声明中使用关键字来代替(或除此之外)publicprotectedprivate. 如果您声明一个属性 using var,那么 PHP 5 将把该属性视为已声明为public.

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

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

于 2012-11-24T16:27:12.567 回答