2009-11-09 7 views
0

클래스의 생성자를 기반으로합니다. 새로운 방법을 창조하거나 파괴하십시오. 나는 종종 클래스 내에서 메소드를 사용 불가능하게하거나 파괴하기 위해 구조를 기반으로해야한다. 어느 누구도 나를 도울 수 있습니까?구조체에 따라 일부 메서드를 만들거나 삭제합니다.

class Test 
{ 
    function __construct(userID) 
    { 
    if(!isValidUser($userID)) 
    { destroy(methods); } 
    } 
    function addPost() 
    { 

    } 
} 

파괴가 호출됩니다. 방법 또는 선택한 방법을 파괴해야합니다

희망이 시간.

+1

죄송합니다. 나는이 질문을 이해하지 못하는 것 같습니다. 아마도 예제 코드를 추가하거나 좀 더 자세하게 추가 할 수 있습니다. 실제로 달성하려는 것은 무엇입니까? – MalphasWats

+0

무엇이 당신의 질문입니까? – ty812

답변

3

팩토리 패턴을 사용하여 클래스의 하위 클래스 인스턴스를 만들 수 있습니다. 각 서브 클래스에는 필요한 메소드가 있습니다. 수퍼 클래스에는 모든 서브 클래스에 필요한 메소드 만 있습니다.

class User 
{ 
    function foo(){} 
    function foo1(){} 
    static function constructUser() 
    { 
     if(self::isValidUser()) 
     { 
      return new ValidUser(); 
     } 
     else 
     { 
      return new User(); 
     } 
    } 

    static function isValidUser() 
    { 
     //... 
    } 
} 

class ValidUser extends User 
{ 
    function addItem(){} 
} 

$user = User::constructUser(); 
+0

하위 클래스가 기본 클래스를 확장해야 함을 잊지 마십시오. – defines

+0

고마워, 잊어 버렸어. – Ikke

+0

인상적인 대답. – itsoft3g

0

PHP에서 기능을 비활성화하거나 파괴 할 수있는 방법이 없습니다. 그러나 반대편에서 이것을 접근 할 수 있습니다. 즉, 생성자 내에서 적절한 경우에만 함수를 작성하십시오 (예 : create_function() 사용). 또는 수퍼 클래스를 사용하고 서브 클래스가 필요로하는 함수 만 확장하는 서브 클래스를 사용하여 수퍼 클래스를 확장 할 수 있습니다. 당신이 더 많은 일러스트레이션을 원한다면 나는 당신에게 예제를 게시 할 수있다.

1

팩토리 패턴을 필요로한다는 느낌이 들었습니다. 인수에 따라 다른 유형의 객체를 만드는 객체 (또는 함수)입니다.

다른 방법 집합을 정의 할 때 실제로 수행하는 작업은 사용자에 따라 AuthenticatedUser 개체 대 NonAuthenticatedUser 인 개체를 만드는 것입니다.

ClassX의 생성자를 사용하는 것은 실제로 좋은 방법이 아닙니다.

class User { // with common methods 
} 

class ValidUser extends User { 
    function onlyForValid() {} 
} 

class InvalidUser extends User { 
    function onlyForInvalid() {} 
} 

function createObject($id){ 
    if(isValidUser($id)) return new ValidUser($id); 
    else return new InvalidUser($id); 
} 
관련 문제