Php sayfaları arasında nesnesi paylaşmak için bir yolu var mı?

5 Cevap php

Ben php için yeni, ancak diğer web teknolojileri, sen sayfa örnekleri arasında nesneleri paylaşabilirsiniz. Örneğin, java jsp sayfaları kolayca tüm sunucu örneği gibi statik bir sınıf var, o sınıfın üzerinde var. Php bunu nasıl?

Ben (en azından ben öyle düşünmüyorum) oturumları değişkenlere atıfta değilim. Bu kaynak havuzu (belki paylaşmak için soket, veya veritabanı bağlantıları vb) amacıyla daha fazladır. Yani bütün sınıf sonraki yükler değil, ben oturumda saklayabilir sadece bazı ilkel değişkenler arasında paylaşılması gerekiyor.

Ben de php tekiz sınıfları yapıyor içine baktım ama ben bu sınıf, sadece aynı sayfa içinde olup sayfalar arasında paylaşılır inanıyorum.

Işler daha da belirgin hale getirmek için, bana paylaşmanıza yardımcı olabilir şey, diyelim ki, bir connectSocket.php sayfa için bir sunucuya bağlı bir yuva arıyorum o sayfayı yükler tüm kullanıcıların aynı soket kullanır ve bir açılmıyor böyle Yeni bir.

5 Cevap

Bu zor bir cevabın biraz, ve aradığınız tam olarak ne olmayabilir.

PHP 'paylaşılan bir şey' mimarisi üzerine inşa edilmiştir. Eğer uygulama karşısında devletin bir tür ihtiyaç varsa, başka yollarla bunu yapmanız gerekir.

Öncelikle ben gerçekten ihtiyacınız var mı .. sorunun özüne bakarak tavsiye ederim? Eğer PHP uygulama die (ve devlet kaybetmek) olabilir varsayarsak bu verileri kaybetmek ok?

Eğer durumunu korumak gerekir, aksi takdirde başvuru ölür ya da sonra bile, büyük olasılıkla veri MySQL koymak için en iyi yer üstlenmelidir. PHP sizin iş mantığı etrafında ince bir tabaka olarak tasarlanmıştır, böylece bu tavsiye edebilir.

Sonra yeniden başlatma veri kaybetme umurumda değil eğer, aradığınız problem alanı muhtemelen önbelleklemesidir. I memcached bakarak tavsiye veya tek bir makine üzerinde iseniz, apc. Olur APC kesinlikle tek bir makinede Apache ile sizin için çalışacak, ama yine de veri kaybedebilirsiniz varsayarak uygulama kod zorunda olacak.

Eğer altta yatan datastore (MySQL) çok yavaş olduğunu, ama yine de bir yeniden başlatma sonra verileri korumak için gereken endişeli iseniz, bu 2 sistemlerin bir arada içine bakmak gerekir. Her zaman itme ve önbellekten veri çekme, ancak güncellemeleri sadece Mysql bitti gönderebilirsiniz.

Veri tamamen kullanıcı veya oturum bağlı ise, muhtemelen sadece oturumları sistemine bakarak istiyorum.

Ben şahsen oldukça büyük multi-kiracı uygulama geliştirdik ve bunun oldukça karmaşık bir uygulama olmasına rağmen, ben aradığınız gerçek durumunu hiç gerek olmadı.

Update: Üzgünüm, ben bir yuva paylaşımı hakkında not okumadım. Eğer daha da sorunu açıklamak eğer belki, bu işlemek için ayrı bir daemon ihtiyacınız olacak, diğer yaklaşımlar olabilir. Bu soket türü nedir?

Web servis Java ve PHP ve Perl gibi web-servis yorumlanabilir diller arasında temel bir fark var. Java, web sunucusu (yani Tomcat) durumunu koruyan bir çalışma ortamı olacak. Yorumlanabilir diller ile, web sunucusuna bir istek genellikle sırayla bu durumda, PHP çevre, bu iş parçacığı için taze bir çalışma ortamı yükleyen yeni bir web sunucusu konu, doğacaktır.

Dolayısıyla, PHP, sayfa örnekleri kavramı yoktur. Web sunucusuna her istek yeni bir başlangıç ​​olduğunu. Tüm sınıflar yeniden yüklenir, yani orada sınıf paylaşımı kavramı yok olduğu, ne de dışarıdan uygulandığı sürece orada, kaynak havuzunun bir kavramdır.

Web istekleri arasında yuvalarını Paylaşım nedenle gerçekten mümkün değildir.

Bu büyük olasılıkla kısmi bir cevaptır ancak bir oturum değişkeni içine bir sınıfın bir örneğini kaydetmek ve başka bir zaman erişebilirsiniz.

PHP veritabanı kütüphanelerin çoğu zaten bağlantı havuzu kullanın. Yeni bir bağlantı isteğinde sanki pg_connect, örneğin, arama, ancak bağlantı dizesi zaten var olan bir bağlantı olarak aynı ise, geri yerine kurulan bağlantı alırsınız. Sadece veritabanı erişimi için havuzu önem veriyorsanız, o zaman sadece o kullandığınız db kütüphanede var olduğunu teyit edebilir.

An other horroble solution may be to load the data of the object to any $_SESSION variable and then user it back into the object of the other page. In fact, this is the solution I'm going to follow in my project, until I get some better one.

Saygılar!