OOP php değişken kapsam

2 Cevap php

Herkes burada yardımcı olabilir, ben olmayan birden fazla sınıf sayfa arasında bir nesnelerin özelliklerini nasıl kullandıklarını anlamaya çalışıyorum, ama ben şimdiye kadar denedim her şeyi etrafında başımı almak mümkün görünmüyor olabilir merak ediyorum.

Örneğin bir sınıf denilen kişi;

class person {
 static $name;     
}

ama yönüyle $name kullanmak istiyorsanız farklı düzenli sayfaları bir dizi var.

Ben bu gibi şeyler çalışıyorum var;

pageone.php

include "person.php";
$names = new Person();

echo person::$name;
names::$name='bob';

pagetwo.php

include "person.php";
echo person::$name;

Ben sürece ben yeni örneklerini her sayfa oluşturma gibi iyiyim, ama nasıl paylaşılan bir değişken gibi, herkes için geçerli tek bir nesnenin özelliklerini yapabilirsiniz ölçüde sınıfları ile çalışabilir?

Teşekkürler

2 Cevap

Bir PHP komut her yeni örneği, önceki komut yapılan her "unutur". Sayfa yükleri arasında veri için bir "depo" kurulması olağan yolu oturumları. Bir oturum bir sayfasını ziyaret ettiğinde, bir kullanıcı alır aslında belirli bir kimliktir. Bu kimlik, bir çerez, ya da her URL'ye eklenir GET değişkeni içinde saklanır. PHP oturum spesifik veri içerebilen özel bir dizinde metin dosyaları tutar. Her dosya oturum kimliğini kullanarak adlandırılır.

PHP manuel bir thorough introduction burada vardır.

pageone.php

session_start();
$_SESSION["name"] = "Bob",

pagetwo.php

session_start();

echo $_SESSION["name"];  // Bob

Bir örneği nesne olsaydı Şimdi, serialize , bir oturum değişkeni depolamak ve geri 2. sayfasında bunu unserialize olabilir. Ama statik sınıflar ile yapılabilir sanmıyorum. Ama bu iyi bir başlangıç ​​olmalıdır.

Sen sınıf bildirimi içinde statik değişkeni başlatmak gerekiyor:

class Person {
    public static $name = 'bob';
}

: Yoksa, size statik değişkeni inititalize bazı önyükleme mekanizması, ihtiyaç

bootstrap.php:

Person::$name = 'bob';

ve sonra sayfaları:

// assuming, you preloaded the bootstrap somewhere first
$person = new Person();

echo $person::$name;

edit
Ugh, what was I thinking... the above won't even work. You can't access a static member like that on an instance. Only through a method, like so:

class Person
{
    public static $name;

    public function getName()
    {
        return self::$name;
    }

}

// assuming, you preloaded the bootstrap somewhere first
$person = new Person();
echo $person->getName();

/end edit

Ya Pekka belirttiği gibi, devlet tutmak için oturumları kullanın.

Ama daha importanty: size ulaşmak için çalışıyoruz hedefi nedir? Farklı istekleri arasında bir kişi nesnenin durumunu korumak istiyorsanız, o zaman Pekka güzergâh gitmek, ya da alternatif bir DB gibi başka Persistance depolama mekanizması, Dosya, vb kullanmak için bir yoldur ..

Sanırım Çünkü 'bob' yapmanız adında her Kişi örneği var demek değil mi? Ben tek bir kişi örneğinin durumunu korumak demek sanırım.

Yani, sonuç, muhtemelen başlamak için bir statik üyesi kullanmak istemiyorum.