tags:

views:

32

answers:

3

hi,

Based on constructor of the class. create or destroy new methods. I often requires based on construct to disable or destroy methods within the class. Can any one help me out?

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

  }
}

Once destroy is called. The methods or selected methods should be destroyed

Hope you understand this time.

+3  A: 

You can use the factory pattern to create an instance of a subclass of the class. Each subclass has the methods it needs. The superclass only has the methods every subclass needs.

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();
Ikke
Don't forget that the subclasses should extend the baseclass.
Dustin Fineout
Thanks, forgot that.
Ikke
Impressive answer.
itsoft3g
A: 

There is no way to disable or destroy functions in PHP. You can approach this from the opposite end, however. That is, only create the functions if appropriate (i.e. using create_function()) within the constructor. Alternately, you can use a superclass and extend it using a subclass that only extends the functions that subclass needs. If you would like further illustration I can post an example for you.

Dustin Fineout
+1  A: 

I have the feeling that you are in need of the Factory pattern: an object (or function) that creates objects of different types, depending upon it's arguments.

Because what you really do when defining a different set of methods, depending on the user, is creating objects of another type: an AuthenticatedUser object vs. a NonAuthenticatedUser.

Using a constructor of ClassX for that is really not a good approach.

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 );
}
xtofl