2009-07-06 5 views
39

OOP 패러다임을 처음 접했기 때문에이 질문에 대한 간단한 설명을 볼 수 있습니다 ...PHP 클래스에서 언제 변수를 선언해야합니까?

클래스의 공용 개체 변수를 항상 선언해야합니까? 예를 들어 : $declaredVar 유일한 선언 된 변수 인 경우에도이 코드에서

<?php 

class TestClass 
{ 
    var $declaredVar; 

    function __construct() 
    { 
     $this->declaredVar = "I am a declared variable."; 
     $this->undeclaredVar = "I wasn't declared, but I still work."; 
    } 

    function display() 
    { 
     echo $this->declaredVar . "<br />"; 
     echo $this->undeclaredVar; 
     echo "<br /><br />"; 
    } 
} 

$test = new TestClass; 
$test->display(); 

$test->declaredVar = "The declared variable was changed."; 
$test->undeclaredVar = "The undeclared variable was changed."; 

$test->display(); 

?> 

, $undeclaredVar 마찬가지로 접근 가능한 - 내가 공개로 선언 된 것처럼 행동하는 것 같다.

선언되지 않은 클래스 변수가 항상 그런 식으로 액세스 가능한 경우 앞에 선언하는 것이 무엇입니까?

답변

35

을 설정할 수 있습니다, 그냥 선언되지 않은입니다.

클래스 정의에서 변수 선언은 읽기 쉽도록 스타일을 지정하는 것입니다. 플러스 접근성 (비공개 또는 공개)을 설정할 수 있습니다.

어쨌든 변수를 명시 적으로 선언하는 것은 OOP와는 아무런 관련이 없습니다. 프로그래밍 언어와 관련이 있습니다. 변수를 명시 적으로 선언해야하기 때문에 Java에서는이를 수행 할 수 없습니다.

+2

PHP는 선언되지 않은 변수가 실제로 용서하기 때문에 그렇습니다. – Andrew

+1

오른쪽. PHP는 경고를 내야합니다 ... place error_reporting (E_ALL); 파일 상단에 있습니다. – Stephan202

+0

해석하는 것으로 너무 용서하지 않습니다 –

1

캡슐화의 일반적인 OOP 패러다임은 내적 상태 변수를 외부에 공개해서는 안된다는 뜻이며, 이는 private가되어야 함을 의미하므로 사용자가 사용하는 코드를 변경할 필요없이 클래스의 구현을 변경할 수 있습니다. 클래스의 생성자와 getter 및 setters 메소드를 통해 변수를 초기화하는 것이 더 좋습니다. 당신은 클래스 내부의 멤버를 선언하면

13

당신은 그것의 접근성에게 변수가 초기화되지 않았는지 예컨대

private $varname; 
+5

NB : 이것은 PHP 5 (단지 4.x 트리를 사용하고있는 경우를 대비하여)에서만 지원되었지만, 변수와 메소드의 가시성을 명시 적으로 설정하는 것이 좋은 습관입니다. PHP 통역사가 그것을 요구하지 않는다고해서 사용해서는 안된다는 것을 의미하지는 않습니다. –

0

일반적으로 변수는 제대로 수행 할 수있는 정보가있는 즉시 초기화해야합니다.

클래스 변수가 현저하게 초기화되기 위해 특정 정보를 필요로하는 경우 해당 정보는 생성자에 전달되어야합니다.

정의의 시점에서 PHP의 구문을 사용하여 암시 적으로 변수를 선언하면 IMHO에서 버그를 도입 할 수 있습니다. 클래스에 변수가 필요한 경우이를 선언하고 OOP에서 제공하는 모든 정보 숨김을 사용하십시오.

9

항상 멤버 변수를 선언하고 클래스 내에서 액세스 가능성을 지정해야합니다. 나는이 정보를 내 기능 후에 학급 말미에두고 싶다.

정보를 입력하는 즉시 정의해야합니다. 아마도 생성자 또는 setter 함수를 통해있을 수 있습니다.

코드를 사용하는 사람들이 작업을 훨씬 수월하게하기 때문에이 작업을 수행하는 것이 중요합니다. 그들은 다른 속성이 어디서 왔는지, 왜 그곳에 있는지를 추측 할 필요가 없습니다. 또한 대부분의 IDE는 클래스 변수를 선언하지 않는 한 클래스 변수를 선택하지 않습니다. 코드 완성/힌트는 IDE의 많은 이점 중 하나이며 변수를 선언하지 않으면 해당 기능이 쓸모 없게됩니다.

+0

"그렇게하기에 충분한 정보를 얻 자마자 정의해야합니다."이것이 생성자 이전이거나 생성자 또는 설정 도구에 있다면 중요합니까? – tehlivi

0

Federico Culloca가 말했듯이 "해당 변수는 초기화되지 않았으며 선언되지 않았습니다." 또한 그들에게 적용되는 public 수정 자처럼 행동 할 수 있도록 접근 수정자를 정의하지 않았습니다.

당신은 이미 알고있을 것입니다. PHP는 느슨하게 입력 된 언어입니다.그러나 프로그래머는 항상 모범 사례를 따라야합니다 (PHP에서는 원시 데이터 형식을 사용하지 마십시오).

클래스 수준 변수에는 private 한정자를 사용해야하며이를위한 접근 자 및 변경자 메서드 (Getters 및 Setters)를 제공해야합니다.

관련 문제