3

Bcrypt.classハッシュメソッドを含むuserDAO.classがあり、登録メソッドを含む があります。

Bcrypt.classのメソッドは非公開です。userDAO.classパスワードをハッシュできるように、どのようにアクセスできますか?

コードを見る必要がある場合はお知らせください。

4

3 に答える 3

1

Bcryptクラスのメソッドを または のいずれpublicかにしprotectedます。

これらは、心に留めておくべきことです。

  • Public Methods:どこからでもアクセス可能
  • Protected Methods: クラスおよびそれを継承する他のクラスからアクセスできます。
  • Private Methods: 対応するものだけがアクセスできます。
于 2013-09-14T09:26:52.543 に答える
1

privateメソッドを宣言しているクラスの外部からメソッドにアクセスすることはできません。API 開発者が使用することにした場合private、チャンスはありません。protected私は個人的に、ほぼすべての状況で好みます。一部の API 開発者は..

クラスのソースコードに個人的にアクセスでき、Bcrypt何も壊さずに変更できる場合は、メソッドをprotected作成してクラスを拡張するか、それらを均等にするpublic

もう 1 つの設計アプローチは、アルゴリズムを別のクラスに配置し、それらをBcryptクラスやその他のクラスで使用することです。

于 2013-09-14T09:11:52.333 に答える
1

PHP 5.4 とReflectionMethod::getClosure()の時点で、外部からプライベート メソッドにアクセスできるようです。正直なところ、実際に機能すると信じる前に、次のソリューションを試してみる必要がありました。

Denis Doronin による User Contributed Notes セクションからのコード。

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.
于 2014-01-23T19:05:41.173 に答える