На основе конструкции создать или удалить некоторые методы - PullRequest
0 голосов
/ 09 ноября 2009

На основе конструктора класса. создавать или уничтожать новые методы. Мне часто требуется на основе конструкции отключить или уничтожить методы в классе. Кто-нибудь может мне помочь?

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

  }
}

Однажды уничтожить называется. Методы или выбранные методы должны быть уничтожены

Надеюсь, вы понимаете это время.

Ответы [ 3 ]

3 голосов
/ 09 ноября 2009

Вы можете использовать шаблон фабрики для создания экземпляра подкласса класса. У каждого подкласса есть необходимые методы. Суперкласс имеет только те методы, которые нужны каждому подклассу.

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();
1 голос
/ 09 ноября 2009

У меня такое ощущение, что вам нужен шаблон Factory: объект (или функция), который создает объекты разных типов в зависимости от своих аргументов.

Поскольку то, что вы действительно делаете при определении другого набора методов, в зависимости от пользователя, - это создание объектов другого типа: объект 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 );
}
0 голосов
/ 09 ноября 2009

Нет способа отключить или уничтожить функции в PHP. Однако вы можете подойти к этому с противоположной стороны. То есть, только создавайте функции, если необходимо (то есть, используя create_function ()) внутри конструктора. Кроме того, вы можете использовать суперкласс и расширять его с помощью подкласса, который расширяет только те функции, которые необходимы подклассу. Если вам нужна дополнительная иллюстрация, я могу опубликовать пример для вас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...