1

我正在编写一个调用另一个类并返回它的函数,以便我可以执行我的方法$this->myUser()->getUsername()......现在我的问题是:

有没有办法让我->getUsername()从内部myUser()拦截或拦截找不到的?...

这是因为我想使用另一个类,myUserExtended()我想知道是否可以将它们一起路由到内部myUser()。这样 if ->getCity()is not in myUser()it 会自动继续并使用另一个包含的变量myUserExtended()

可能是不可能的,但值得一问。

private function myUser( $setMyUser = false ) {

        if( $setMyUser ) {
            $this->_myUser = $setMyUser;
        }

        if( empty( $this->$_myUser ) ) {
            $this->_myUser = UserQuery::create()->findPK( $this->variables('userID') );
        }

        return $this->_myUser;
    }
4

3 回答 3

1

像这样的东西可能会奏效:

public function __call($name, $args)
{
    if (function_exists($this->_myUser->$name())) {
        return $this->_myUser->$name();
    }
    return $this->_myUserExtended->$name();
}

如果您使用任何参数,您显然必须对其进行调整。

于 2013-06-21T14:15:39.710 回答
0

$this->myUser()->getUsername()相当于$user = $this->myUser(); $user->getUsername()。如果您可以向变量包含的任何类添加方法$user,那么您可以使用__call()魔术方法并检查是否->getCity()存在。或者您可以添加一个调用方法,该方法getCity()调用myUserExtended().

于 2013-06-21T14:15:41.430 回答
0

也许这样的事情会有所帮助:

class MyUserClass {
  private $_myUser;
  public function myUser( $setMyUser = false ) {

        if( $setMyUser ) {
            $this->_myUser = $setMyUser;
        }

        if( empty( $this->$_myUser ) ) {
            $this->_myUser = UserQuery::create()->findPK( $this->variables('userID') );
        }

        return $this; //if you want to use method chaining, you have to return $this
    }
  public function __call($name, $arguments) {
    $ext = new myUserExtended();
    $ext->$name($arguments);
    return $ext;
  }
}

$myUser = new MyUserClass();

$myUser->myUser()->getCity("New York"); //this will call $ext->getCity(array("New York"))
于 2013-06-21T14:36:49.823 回答