从类外部访问私有方法

时间:2013-09-14 09:08:05

标签: php visibility

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

在我的Bcrypt.class中,方法是私有的。如何在userDAO.class中访问它们,以便我可以哈希密码?

如果您需要查看任何代码,请与我们联系。

3 个答案:

答案 0 :(得分:1)

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

如果您可以亲自访问Bcrypt类的源代码,并且可以在不破坏任何内容的情况下进行更改,那么请使用protected方法并扩展类或使其均匀{{1} }

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

答案 1 :(得分:1)

使 Bcrypt 课程中的方法 public protected

这些是你应该记住的事情。

  • Public Methods :可以随时随地访问
  • Protected Methods :可以由类和其他继承它的类访问。
  • Private Methods :只有相应的人才能访问。

答案 2 :(得分:1)

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

来自User Contributed Notes section by 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.