2011-07-05 7 views
0

단순히PHP 비 클라이언트 코더 클래스 실행

다른 클라이언트 코더에 의해 사용하지 않을 클래스를 구축 이론의 문제, 실행의 가장 좋은 방법은 무엇입니까? 다음 고려 :

class Test 
{ 
    public function __construct() 
    { 
     $this->foo(); 
     $this->bar(); 
    } 

    public function foo(){ //do something } 

    public function bar(){ //do something } 
} 

$test = new Test; 

을 나는이 수업이 원하는 정확히 알고, 그리고 주문이에서 수행해야합니다, 나는 단지 건설 중에 함수를 호출. 그러나 다음을 수행하여 동일하게 수행 할 수 있습니다.

class Test 
{ 
    public function __construct(){} 

    public function foo(){ //do something } 

    public function bar(){ //do something } 
} 

$test = new Test(); 
$test->foo(); 
$test->bar(); 

편도 또는 다른 방법을 사용하면 어떤 이점이 있습니까? 그것은 등 성능, 디버깅,

편집

이 범용 질문합니다. 클래스 내에서 메소드를 실행하는 두 가지 방법에 관한 모든 가능성과 우려를 듣고 싶습니다.

+2

유일한 단점은 생성자에서 해당 메서드를 호출 할 때 하위 클래스가 생성자를 잠재적으로 대체 할 수 있으며 개발자가 해당 메서드를 추가 할 수 없다면 해당 메서드가 호출되지 않는다는 점입니다. – Rodaine

+0

매우 유효한 포인트입니다. 너에게 +1 – grep

답변

2

첫 번째 방법에서는 해당 기능을 private으로 만들고 개체 자체 내에서만 사용할 수 있습니다.

class Test 
{ 
    public function __construct() 
    { 
     $this->foo(); 
     $this->bar(); 
    } 

    private function foo(){ //do something } 

    private function bar(){ //do something } 
} 

$test = new Test; 
//so: 
$test->foo(); //will throw an error 

당신이 기능 protected 대신 private의 할 경우,이 클래스에서 상속하는 모든 클래스가

(여전히 외부에서 호출 할 수있는 기능을 허용하지 않으면 서) 기능을 사용할 수있을 것

두 번째 옵션을 사용하면 모든 개체가 클래스 정의 외부에서 해당 함수를 호출 할 수 있으며 코드에 따라 코드를 원하지 않을 수 있습니다.

+0

유효한 포인트. 그러나 클라이언트 코드가 발생하지 않는다면이 문제가 저를 유일한 프로그래머로 생각해야합니까? – grep

+0

@Headspin - '관심사'는 무엇을 의미합니까? – Neal

1

Neal의 답변에 대해 자세히 설명하십시오. 가능한 경우 함수를 비공개로 설정하십시오. 그렇게하면 나중에 변경하려는 경우 해당 클래스 내에서만 사용된다는 것을 알게됩니다.

그래서 질문에 대답하십시오. 코드를 유지 관리하기가 쉽기 때문에 첫 번째 대답이 선호됩니다. 성능이 현명하고 차이는 없습니다.