从类外部访问私有方法


Access private methods from outside a class

我有一个包含我的哈希方法的Bcrypt.class,我有一个包含我的注册方法的userDAO.class

在我的Bcrypt.class,这些方法是私有的。如何在userDAO.class中访问它们,以便对密码进行哈希处理?

如果您需要查看任何代码,请告诉我。

不能从声明它们的类外部访问private方法。如果 API 开发人员决定使用 private那么就没有机会了。我个人在几乎所有情况下都更喜欢protected。一些 API 开发人员没有。

如果您有权访问Bcrypt类的源代码,并且可以在不破坏任何内容的情况下更改它,那么使方法protected并扩展类或使它们甚至public

另一种设计方法是将算法放在一个单独的类中,并在Bcrypt类和其他类中使用它们

Bcrypt类中将方法设为publicprotected

这些是您应该牢记的事情。

  • Public Methods : 可从任何地方访问
  • Protected Methods :可由类和继承它的其他类访问。
  • Private Methods :只有相应的才能访问。

从 PHP 5.4 和 ReflectionMethod::getClosure() 开始,看起来可以从外部访问私有方法。老实说 - 在相信它确实有效之前,必须尝试以下解决方案。

Denis Doronin 的用户贡献笔记部分的代码。

function call_private_method($object, $method, $args = array()) 
{
    $reflection = new ReflectionClass(get_class($object));
    $closure = $reflection->getMethod($method)->getClosure($object);
    return call_user_func_array($closure, $args);
}
class Example 
{
    private $x = 1;
    private $y = 10;
    private function sum() 
    {
        print $this->x + $this->y;
    }
}
call_private_method(new Example(), 'sum');
// Output is 11.