Sınıf tanımı içinde sha1 kullanamaz mıyız?

3 Cevap php

PHP bir giriş sınıfının üzerinde çalışıyorum. Ben bir sınıf tanımı içinde aşağıdaki satırı vardır:

private $salty = sha1('salty');

Hangi ... bana aşağıdaki hatayı veriyor:

"Parse error: parse error, expecting ','' or ';'' C: \ xampp \ htdocs \ test \ hattına 26 " üzerinde \ jaLogin.php içerir

Ben sınıf tanımı dışında bu hattı kullanan denedim ve ben sınıf tanımı içinde kullanmak sadece zaman ben bir sorun olsun o, gayet iyi çalışıyor.

Ben "özel" sözcüğü kaldırırsanız ben biraz farklı bir hata alıyorum:

* Ayrıştırma hatası: C `T_FUNCTION 'bekliyor, ayrıştırma hata: \ xampp \ htdocs \ test \ hattında 26 * üzerinde \ jaLogin.php içerir

Ben belirgin bir şey eksik gibi hissediyorum ...

3 Cevap

Sen sınıf üyesi değişkenleri başlatmak için fonksiyon çağrıları kullanamazsınız.

class YourClass
{
    private $salty;

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

sizin değişken başlatmak için tek yoldur.

EDIT

Hatta, örneğin, iki sabit basit bir dize birleştirme izin verilmez (protected $_string = 'Hello ' . 'World!';). Sınıfı özelliklerinin değerlendirilmesi derleme zamanında olur, yani çalışma zamanı bilgilere bağlıdır yapıların kullanımı yasaktır.

[...] 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)

Sadece değişken olarak geçersiz ilan ve sonra oluşturucu içinde başlatılamadı.

private $salty = null

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

Eğer bir değişken olarak bir işlevi işlemek için çalışıyoruz çünkü $ sha1 () çalışmaz.

Ve daha iyi bir giriş mekanizması üzerinde çalışıyoruz neden kullanmaya başlayabilirsiniz:

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

Ayrıca bir tuz karma oluşturmak ve şifreniz ile ekleyebilirsiniz. Siz de bir db-tabloda tuz kaydetmek ve retreive ve doğrulama (kullanıcı) kimlik olduğunda birleştirmek zorunda çünkü bu ekleme size biraz yükü verir.

Bu size yardımcı olur umarım!