4

私はPHPでログインクラスに取り組んでいます。クラス定義内に次の行があります。

private $salty = sha1('salty');

...次のエラーが表示されます:

「解析エラー: ','' orC:\xampp\htdocs\test\includes\jaLogin.php の 26 行目に ';'' が必要です」

クラス定義の外でこの行を使用しようとしましたが、問題なく動作します。問題が発生するのは、クラス定義内で使用した場合だけです。

「プライベート」という単語を削除すると、少し異なるエラーが発生します。

解析エラー: C:\xampp\htdocs\test\includes\jaLogin.php の 26 行目に「T_FUNCTION」が必要です。

明らかな何かが欠けているような気がします...

4

3 に答える 3

8

関数呼び出しを使用してクラス メンバー変数を初期化することはできません。

class YourClass
{
    private $salty;

    public function __construct()
    {
        $this->salty = sha1('salty');
    }
}

変数を初期化する 1 つの方法です。

編集

たとえば、2 つの定数文字列を単純に連結することはできません ( protected $_string = 'Hello ' . 'World!';)。クラス プロパティの評価はコンパイル時に行われるため、ランタイム情報に依存する構成の使用は違法です。

[...] この宣言には初期化が含まれる場合がありますが、この初期化は定数値でなければなりません。つまり、コンパイル時に評価できる必要があり、評価されるために実行時の情報に依存してはなりません。

(プロパティ)

于 2009-11-18T12:13:26.403 に答える
1

変数を null として宣言し、コンストラクターで初期化するだけです。

private $salty = null

function __construct() {
    $this->salty = sha1('salty');
}
于 2009-11-18T12:16:41.647 に答える
0

関数を変数として処理しようとしているため、 $sha1() は機能しません。

また、より良いログイン メカニズムに取り組んでいる場合は、以下を使用してみてはいかがでしょうか。

$this->salty = hash("SHA512", "salty");

さらに、ソルト ハッシュを作成し、パスワードを追加することもできます。この追加により、ソルトを db テーブルにも保存し、(ユーザー) 資格情報の検証時にそれを取得して結合する必要があるため、少しオーバーヘッドが生じます。

それがあなたを助けることを願っています!

于 2009-11-18T12:24:07.207 に答える