-5

これが問題です...私はいくつかの関数を備えた単純なクラスを持っていますが、それらの関数を呼び出す方法を変更する必要があります。

もともとクラスはこんな感じ

<?php
class Bcrypt {

const DEFAULT_WORK_FACTOR = 8;

public static function hash($password, $work_factor = 0) { ... }

public static function check($password, $stored_hash, $legacy_handler = NULL) { ... }

}?>

モデルがこのクラスを呼び出す方法を変更する必要があります

もともとモデルはこんな感じ

Bcrypt::hash($data['password'])

私がする必要があるのは、この呼び出しを次のように変更することです。

$this->bcrypt->hash($data['password'])

これは簡単な質問かもしれませんが、いくつかの概念を明確にする必要があります...

4

4 に答える 4

3

関数を非静的にします。

そして、クラスとオブジェクトを読んでください。-> を使用するには、クラスをインスタンス化する必要があります。

于 2013-01-17T13:33:37.847 に答える
1

パブリックとスタティックの違いがわからないようです。

静的とは、関数を呼び出すためにインスタンスが必要ないことを意味します。

矢印を使用する場合は、最初に関数をパブリックにしてインスタンスを作成する必要があります。

あなたがしなければならないこと:

//最初にクラスのインスタンスを作成します

$bcrypt = new Bcrypt();

//インスタンス変数を呼び出して関数を選択します

$bcrypt->hash($data['password']);

静的と公開の違いを知っていることが非常に重要です。お役に立てば幸いです。

于 2013-01-17T13:41:43.687 に答える
0

メソッドまたは変数を呼び出す方法は3つあります。

クラス外からの静的変数/メソッド

 class Test {
    public static function testFunc() {}
 }

 Test::testFunc();

クラス内からの静的変数/メソッド

class Test {
    public static function testFunc() {}
    public static function testFromInside() {
        return self::testFunc(); // you can do this with Test::testFunc() as well
    }
}

Test::testFromInside();

クラス内からの非静的変数

class Test {
    public $test;
    public function testFunc() {
         return $this->test;
    }
}

$test = new Test;
$test->test;
$test->testFunc();

不明な点がある場合はお知らせください。より適切に説明できるように努めます。

于 2013-01-17T13:41:22.107 に答える
0

関数呼び出しの構文は、関数が存在するかどうかによって決まるstaticため、直接的な答えは「static関数宣言からキーワードを削除する」です。

ただし、メソッドが存在するかどうかは好みstaticの問題ではありません。それは設計上の決定であるべきです。なぜこの変更を行う必要があるのか​​ はわかりません。投稿されたコードには関連するヒントを提供するものは何もありません。この場合、メソッドが最初にあることは完全に問題ないようです。static

それで、疑問が残ります:なぜあなたは尋ねるのですか?

于 2013-01-17T13:37:26.423 に答える