Не можете использовать sha1 внутри определения класса? - PullRequest
4 голосов
/ 18 ноября 2009

Я работаю над классом входа в PHP. У меня есть следующая строка внутри определения класса:

private $salty = sha1('salty');

... что дает мне следующую ошибку:

"Ошибка разбора: ошибка разбора, ожидание ','' or ';' 'в C: \ xampp \ htdocs \ test \ includes \ jaLogin.php в строке 26"

Я пытался использовать эту строку за пределами определения класса, и она отлично работает, только когда я использую ее внутри определения класса, у меня возникает проблема.

Если я уберу слово «частный», я получу немного другую ошибку:

Ошибка разбора: ошибка разбора, ожидание `T_FUNCTION 'в C: \ xampp \ htdocs \ test \ includes \ jaLogin.php в строке 26

Я чувствую, что упускаю что-то очевидное ...

Ответы [ 3 ]

8 голосов
/ 18 ноября 2009

Вы не можете использовать вызовы функций для инициализации переменных членов класса.

class YourClass
{
    private $salty;

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

- это единственный способ инициализировать вашу переменную.

EDIT

Даже, например, простая конкатенация двух константных строк не допускается (protected $_string = 'Hello ' . 'World!';). Оценка свойств класса происходит во время компиляции, поэтому использование конструкций, которые зависят от информации времени выполнения, недопустимо.

[...] Эта декларация может включать инициализация, но это инициализация должна быть постоянной ценность - то есть она должна быть в состоянии оценивается во время компиляции и не должен зависит от информации во время выполнения в заказ на оценку.

( Свойства )

1 голос
/ 18 ноября 2009

Просто объявите переменную как null, а затем инициализируйте ее в конструкторе.

private $salty = null

function __construct() {
    $this->salty = sha1('salty');
}
0 голосов
/ 18 ноября 2009

$ sha1 () не будет работать, потому что вы пытаетесь обработать функцию как переменную.

И когда вы работаете над улучшенным механизмом входа в систему, почему бы не начать использовать:

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

Кроме того, вы можете создать соленый хеш и добавить его со своим паролем. Это дополнение приводит к небольшим накладным расходам, потому что вам придется также сохранять соль в db-таблице, извлекать и комбинировать ее при проверке учетных данных (пользователя).

Надеюсь, это поможет вам!

...