PHP bir Singleton webcoder oluşturmak için en iyi yolu nedir?

2 Cevap php

Biz bir seferde sadece tek bir bağlantı sağlayan bir DB erişmek için bir ihtiyaç var. Bu benim için "tekil" haykırıyor. Tabii yakalamak tekiz bağlantı bir web hizmeti (- arama uygulaması (ler) ayrı bir sunucuda bulunan en muhtemel bir SOAP tabanlı web-servisi) - üzeri (doğrudan ya da dolaylı olarak) maruz kalacağı hangi anlamına gelir tekiz sınıf bağlanmaya çalışılırken birden fazla app / örneği olabilir.

PHP, küresel bir tek ya da bir web hizmeti singleton'ununu oluşturmak için en iyi yolu nedir?

TIA

2 Cevap

PHP, tüm istekleri karşısında bulunan bir "küresel" bir nesne olarak böyle bir şey yoktur. Bir java web sunucusu, bu "uygulama seviyesi veri deposu" olarak adlandırılan olacaktır. Php, (genel anahtar sözcüğünü kullanarak) "küresel" kapsamı ölçüde tek bir istek olduğunu. Şimdi, $ _SESSION üzerinden erişilebilir bir çapraz oturum veri deposu da, ama ben php hiçbir değişken gerçekten "küresel" olduğunu vurgulamak için çalışıyorum. Bireysel değerler yerel bir dosyaya saklanır edilerek küresel olması, ya da bir veritabanına taklit, ancak bir kaynak gibi bir şey için, her isteği üzerine onu oluştururken sıkışmış.

Now, at the request level, you can create a Singleton that will return an initialized resource no matter which scope within the request you call it from, but again, that resource will not persist across or between requests. I know, it is a shortcoming of php, but on the other hand, the speed and stability of the individual requests help make up for this shortcoming. Edit: After reading over your question again, I realized you may not be asking for a singleton database access class, but rather something that can resource lock your database? Based on what you said, it sounds like the database may do the locking for you anyway. In other words, it won't allow you to connect if there is already another connection. If that is the case, it seems kind of like you have 2 options: 1) just let all your pages contend for the resource, and fail if they don't get it.

2), sorguları kabul onları çalıştırmak, daha sonra geri alma için sizin için sonuçlarını önbelleğe bir kuyruk oluşturma hizmeti.

Bu benim için "bir DB SERVER kullanın" haykırıyor. ;-), Ama ...

Bir SoapServer oluşturabilir ve bir seferde sadece 1 bağlantı sağlamak için bir semaphore kullanabilirsiniz

$s1 = sem_get(123, 1);
sem_acquire($s1);

// soapserver code here

sem_release($s1);