我有一个包含我的哈希方法的Bcrypt.class
,我有一个包含我的注册方法的userDAO.class
。
在我的Bcrypt.class
,这些方法是私有的。如何在userDAO.class
中访问它们,以便对密码进行哈希处理?
如果您需要查看任何代码,请告诉我。
不能从声明它们的类外部访问private
方法。如果 API 开发人员决定使用 private
那么就没有机会了。我个人在几乎所有情况下都更喜欢protected
。一些 API 开发人员没有。
如果您有权访问Bcrypt
类的源代码,并且可以在不破坏任何内容的情况下更改它,那么使方法protected
并扩展类或使它们甚至public
另一种设计方法是将算法放在一个单独的类中,并在Bcrypt
类和其他类中使用它们
在Bcrypt
类中将方法设为public
或protected
。
这些是您应该牢记的事情。
-
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.