Php 从类外部访问私有方法

Php 从类外部访问私有方法,php,visibility,Php,Visibility,我有一个包含散列方法的Bcrypt.class,还有一个包含register方法的userDAO.class 在myBcrypt.class中,方法是私有的。如何在我的userDAO.class中访问它们,以便散列我的密码 如果您需要查看任何代码,请告诉我。您不能从声明它们的类之外访问私有方法。如果API开发者决定使用private,那么就没有机会了。我个人喜欢在几乎所有情况下都受到保护。一些API开发人员不这样做 如果您拥有对Bcrypt类的源代码的个人访问权限,并且可以在不破坏任何内容的情况

我有一个包含散列方法的
Bcrypt.class
,还有一个包含register方法的
userDAO.class

在my
Bcrypt.class
中,方法是私有的。如何在我的
userDAO.class
中访问它们,以便散列我的密码


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

您不能从声明它们的类之外访问
私有方法。如果API开发者决定使用
private
,那么就没有机会了。我个人喜欢在几乎所有情况下都受到保护。一些API开发人员不这样做

如果您拥有对
Bcrypt
类的源代码的个人访问权限,并且可以在不破坏任何内容的情况下对其进行更改,则将方法设置为
protected
并扩展该类,甚至将其设置为public


另一种设计方法是将算法放在一个单独的类中,并在
Bcrypt
类中使用它们,而其他方法则将您的方法放在
Bcrypt
类中,要么
公共
要么
受保护

这些是你应该记住的事情

  • 公共方法
    :可以从任何地方访问
  • 受保护的方法
    :可由类和继承它的其他类访问
  • 私有方法
    :只有相应的方法才能访问
从PHP5.4开始,似乎可以从外部访问私有方法。老实说,在相信以下解决方案确实有效之前,必须先尝试一下

源代码


如果你想从另一个类中使用它们,请将它们公开。公开它们或使它们静态,这样你就可以称之为……那么,与我现有的答案相比,你的答案有什么好处呢?我在回答我的答案时甚至没有看你的答案。通常情况下,答案是:阅读问题,看答案。如果问题已经有了答案,并且您通过->upvote确认,则转到下一个问题。没有什么可抱怨的,您的答案在顶部。所以冷静点。@DipeshParmar未删除。:)
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.