2012-11-24 2 views
2

에 어디 선가이 코드를 읽고 기억 : 쉼표 public $foo = 6, $bar; 무엇을쉼표 공용 변수

<?php 

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

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

을합니까? public을 제거하면 IDE에서 오류가 발생하는 이유는 무엇입니까? 나는 이것을 수행하여 $bar이 선언되었음을 알았지 만, 이것이 왜 이런 식으로 코딩하는지에 대한 유일한 이유라고 생각지 않습니다.

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

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

기본적으로, 단지 다른 공용 변수를 선언 의미

답변

4

쉼표 기능적으로 동일하다. 공용을 제거하면 더 이상 공용 변수를 선언하지 않으므로 IDE에서 불평합니다. 사람들이 그렇게 코딩하는 이유는 공간을 절약하기 위해서입니다. 그것은 더 긴 형태의 단지 속기 일뿐입니다.

3

쉼표는 공공 $ foo = 6, $ bar;에서 무엇을합니까? $foo (기본값 null와)과 $bar (기본값 6) - - public - - 동일한 액세스 수정

그것은 당신이 두 개의 클래스 속성을 선언 할 수 있습니다 여기처럼, 두 번 반복하지 않고 :

그런데
public $foo = 6; 
public $bar; 

, no output는 문자열 (빈 문자열)이 null 값 변환의 결과이다.

공개적으로 제거 할 때 내 IDE에서 오류가 발생하는 이유는 무엇입니까?

액세스 한정자를 지정하지 않으면 속성을 지정할 수 없으므로 인용 부호는 다음과 같습니다. :

클래스 멤버 변수를 "속성"이라고합니다. [...] 키워드 public, protected 또는 private, 중 하나를 사용하여 일반 변수 선언을 사용하여 으로 정의됩니다. [...]

PHP (4)과의 호환성을 유지하기 위해, PHP 5 여전히 대신에 (또는 추가로)에 public, protected 또는 private 속성 선언에 키워드 var의 사용을 허용한다. var을 사용하여 속성을 선언하면 PHP 5는 해당 속성을 public으로 선언 된 것처럼 처리합니다. 당신이 var을 사용하지 않는 즉

는 회원 변수에 대한 default access modifier으로 PHP에서 같은 것은 (또는 no access modifier에 대한 특별 대우)가 없습니다. 그리고 예, 일종의 불일치입니다. 구성원 으로 액세스 한정자없이 정의 할 수 있습니다 (이 경우에는 public으로 처리됩니다).

...그리고 그건, btw, 그 이유는 혼란에 대한 unexpected T_VARIABLE, expecting T_FUNCTION 오류 메시지입니다; 그 $foo = 6 문장은 결국 함수 선언으로 취급됩니다.