基于构造创建或删除一些方法

时间:2009-11-09 14:40:05

标签: php

基于类的构造函数。创建或销毁新方法。 我经常要求基于构造来禁用或销毁类中的方法。 任何人都可以帮助我吗?

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

  }
}

一旦召唤毁灭。应销毁方法或选定的方法

希望你能理解这一次。

3 个答案:

答案 0 :(得分: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();

答案 1 :(得分:1)

我觉得你需要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 );
}

答案 2 :(得分:0)

无法在PHP中禁用或销毁函数。但是,你可以从另一端接近这一点。也就是说,只在构造函数中创建适当的函数(即使用create_function())。或者,您可以使用超类并使用仅扩展子类所需函数的子类来扩展它。如果您想进一步说明,我可以为您发布一个示例。