PHP, diğer sınıflarda diğer nesneleri geçmek ya erişmek için en iyi yolu nedir?

4 Cevap php

PHP benim sınıfları nasıl dışarı planlama biraz yardıma ihtiyacım var. Ben hemen hemen içinde her I (forumlar, mail, kullanıcılar çok daha fazla sınıfları) kullanmak sınıf erişmek için gereken bir oturum sınıfı ve bir veritabanı sınıfı var

Yani benim diğer sınıfların içinde oturumu sınıf erişmek nasıl arıyorum, 1 seçeneği başka ben böyle kullanmak her sınıfa $ oturumu $ ve veritabanı nesneleri geçmek, bu GLOBAL yapmaktır ...

$mail = new Mail($session, $database);

Ben 15 + farklı sınıflar için bunu yapmak zorunda ama eğer bu oldukça sıkıcı görünüyor? Daha iyi bir yolu var mı?

Aşağıda diğer sınıfların içini çağırıyor olacak benim oturumları sınıfından bazı yöntemlerden bir örnektir.

// set a value into session
$session->set('auto_id', 'some value for auto_id');

// get a value from session
$session->get('auto_id');

4 Cevap

Bu gibi senaryolar i registry pattern faydalanmak istiyorum. Bu oldukça iyi bir explanation.

Kayıt defteri desen nesneler için bir depolama gibi davranır.

Bir kod örneği adlı yolda.

Edit:

Sizin örnekte (yeni Mail ($ session, $ database)), i sen kayıt deseni kullanmak bile bunu düşünüyorum. Bunu anlamak ve bağımsız parçaları değiştirmek için her şey daha eşleşmiş ve kolaylaştırır. Ben son yıllarda birkaç çok PHP yapmadıysanız gibi, mevcut herhangi bir IOC-çerçeve varsa ben bilmiyorum, ama bu sizin sınıfları başlatmasını yardımcı olacaktır.

Ben singleton pattern bu durumda çok iyi bir uyum olacağını sanırdım.

Makul bir uygulama gibi görünüyor talkPHP at üzerinde (bazı örnek kod ile) güzel ve basit bir öğretici var.

Oturumları ve veritabanları gibi şeyler için, ben küresel değişkenler burada gayet iyi olduğunu düşünüyorum.

Ben küresellerle kullanarak tamamen katılmıyorum. Bu birim test çok daha zor hale getirecek rağmen, önerilen Defteri desen kullanmak veya Oturum ve DB kendilerini Singletons hem yapacak ya.