2009-11-18 4 views
4

Je travaille sur une classe de connexion en PHP. J'ai la ligne suivante dans une définition de classe:Vous ne pouvez pas utiliser sha1 dans la définition de classe?

private $salty = sha1('salty'); 

... ce qui me donne l'erreur suivante:

« Parse error: parse error, attendant ','' or ';' » dans C: \ xampp \ htdocs \ test \ inclut \ jaLogin.php sur la ligne 26 "

J'ai essayé d'utiliser cette ligne en dehors de la définition de la classe et ça marche bien, c'est seulement quand je l'utilise dans la définition de classe que je reçois un problème.

Si je retire le mot "privé" j'obtiens une erreur légèrement différente:

Parse error: parse error, attend `T_FUNCTION » dans C: \ xampp \ htdocs \ test \ includes \ jaLogin.php sur ligne 26

Je me sens comme si je manque quelque chose évidente ...

Répondre

8

Vous ne pouvez pas utiliser la fonction-appels pour initialiser les variables membres de classe.

class YourClass 
{ 
    private $salty; 

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

est la seule façon d'initialiser votre variable.

EDIT

Même, par exemple, un simple concaténation de deux chaînes constantes n'est pas autorisé (protected $_string = 'Hello ' . 'World!';). L'évaluation des propriétés de classe a lieu au moment de la compilation, de sorte que l'utilisation des constructions qui dépendent des informations d'exécution est illégale.

[...] This declaration may include an initialization, but this initialization must be a constant value--that is, it must be able to be evaluated at compile time and must not depend on run-time information in order to be evaluated.

(Properties)

+0

Bingo! Droit sur la marque! Merci pour ça. Une idée de pourquoi c'est? –

+0

C'est parce que votre classe est juste une structure de données. Vous devez toujours appeler une fonction pour les définir sur certaines valeurs. Dans votre cas, c'est la fonction constructeur. – toto

+1

Ajout d'une explication. En fait, c'est un problème de quand, dans le processus d'exécution, les variables membres sont évaluées. –

1

Juste la variable déclarer comme nulle puis l'initialiser dans votre constructeur.

private $salty = null 

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

$ sha1() ne fonctionnera pas car vous essayez de gérer une fonction en tant que variable.

Et quand vous travaillez sur un meilleur mécanisme de connexion pourquoi ne pas commencer à utiliser:

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

vous pouvez créer un hachage plus de sel et ajouter votre mot de passe. Cet ajout vous donne un peu de temps, car vous devrez également enregistrer le sel dans une table db et le récupérer et le combiner lorsque vous êtes en cours de validation (utilisateur).

J'espère que cela vous aidera!

+0

Ce n'est pas le cas, mais merci d'avoir essayé! –

Questions connexes