4 Stimmen

Kann sha1 nicht innerhalb der Klassendefinition verwendet werden?

Ich arbeite gerade an einer Login-Klasse in PHP. Ich habe die folgende Zeile innerhalb einer Klassendefinition:

private $salty = sha1('salty');

...der mir folgende Fehlermeldung gibt:

"Parse-Fehler: Parse-Fehler, erwartet ','' or ';'' in C:\xampp\htdocs\test\includes\jaLogin.php in Zeile 26"

Ich habe versucht, diese Zeile außerhalb der Klassendefinition zu verwenden, und es funktioniert gut, es ist nur, wenn ich es innerhalb der Klassendefinition verwenden, dass ich ein Problem bekommen.

Wenn ich das Wort "privat" entferne, erhalte ich einen etwas anderen Fehler:

Parse-Fehler: Parse-Fehler, erwartet `T_FUNCTION' in C:\xampp\htdocs\test\includes\jaLogin.php in Zeile 26

Ich habe das Gefühl, ich übersehe etwas Offensichtliches...

8voto

Stefan Gehrig Punkte 80686

Sie können keine Funktionsaufrufe verwenden, um Klassenvariablen zu initialisieren.

class YourClass
{
    private $salty;

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

ist die einzige Möglichkeit, Ihre Variable zu initialisieren.

EDITAR

Auch eine einfache Verkettung von zwei konstanten Zeichenketten ist nicht erlaubt ( protected $_string = 'Hello ' . 'World!'; ). Die Auswertung der Klasseneigenschaften erfolgt zur Kompilierzeit, so dass die Verwendung von Konstrukten, die von Laufzeitinformationen abhängen, unzulässig ist.

[...] Diese Erklärung kann Initialisierung enthalten, aber diese Initialisierung muss eine Konstante sein Wert sein, d.h. sie muss beim Kompilierzeit ausgewertet werden und darf nicht von Laufzeitinformationen abhängen, um um ausgewertet werden zu können.

( Eigenschaften )

1voto

pablasso Punkte 2459

Deklarieren Sie die Variable einfach als Null und initialisieren Sie sie dann in Ihrem Konstruktor.

private $salty = null

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

0voto

Ben Fransen Punkte 10746

$sha1() wird nicht funktionieren, weil Sie versuchen, eine Funktion als Variable zu behandeln.

Und wenn Sie an einem besseren Anmeldemechanismus arbeiten, warum nicht gleich damit anfangen?

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

Zusätzlich können Sie einen Salt-Hash erstellen und ihn zusammen mit Ihrem Passwort hinzufügen. Dieser Zusatz führt zu einem gewissen Overhead, da Sie das Salz ebenfalls in einer Datenbank-Tabelle speichern und bei der Validierung der (Benutzer-)Anmeldedaten wieder abrufen und kombinieren müssen.

Ich hoffe, es hilft Ihnen!

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X