我有一个Bcrypt.class
,其中包含我的哈希方法,我有userDAO.class
,其中包含我的注册方法。
在我的Bcrypt.class
中,方法是私有的。如何在userDAO.class
中访问它们,以便我可以哈希密码?
如果您需要查看任何代码,请与我们联系。
答案 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.