Administratorzy gnysek Opublikowano 7 Maja 2009 Administratorzy Udostępnij Opublikowano 7 Maja 2009 Mam sobie np. taki kod: class Sesja { public $username; function __construct() { $this->username = 'Stefan'; } } class Skin { public function pokazStrone() { global $ses; echo $ses->username; } } // -- teraz główna część strony $ses = new Sesja(); $skin = new Skin(); $skin->pokazStrone(); Da sie jakoś pominąć słowo global? Bo to psuje moim zdaniem całą frajdę i sens uyzywania OOP. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Filar Społeczności Ranmus Opublikowano 7 Maja 2009 Filar Społeczności Udostępnij Opublikowano 7 Maja 2009 Po pierwsze niestety php pod tym względem jest głupie, bo języki c podobne zawsze mają zasięg do nadrzędnych zmiennych. Możesz używać zmienną $GLOBALS jeśli nie podoba się global. Poza tym twój kod zawiera błąd logiczny, ale rozumiem że zapewne chciałeś tylko potestować. Z metody klasy Skin odwołujesz się bezpośrednio do pola obiektu Sesja co już nam pokazuje, że nie różnicujesz obiektów sesji, dlatego też klasa Sesja powinna być klasą statyczną i dzięki temu będzie dostępna bez użycia magicznego słowa global. Jednakże pomijając już ten fakt, możesz zrobić coś takiego: class Sesja { public $username; private static $sessions = array(); private function __construct( $username = 'Stefan' ) { $this->username = $username; } public static function PobierzSesje( $username = 'Stefan' ) { if ( !isset( self::$sessions[$username] ) self::$sessions[$username] = new Sesja( $username ); return self::$sessions[$username]; } } I teraz zeby pobrac sesje domyslnego uzytkownika pisze byle gdzie: $obiekt_sesji = Sesja::PobierzSesje(); a jesli konkretnego to: $obiekt_sesji = Sesja::PobierzSesje('Jurek'); edit: Zawsze mozesz zrobic to samo co wiekszosc frameworkow, a mianowicie dorob jedna glowna klase statyczna, ktora przechowuje referencje do obiektow, ktore bedziesz uzywal. :) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 7 Maja 2009 Autor Administratorzy Udostępnij Opublikowano 7 Maja 2009 Mam tak: <?php class HMT { public static $modules = array(); public static $costam = 'a'; public static function Init() { self::$modules['core'] = new Core; self::$modules['session'] = new Session; self::$modules['core']->setSess( self::$modules['session'] ); } } class Core { public $wersja; private $sess; function __construct() { $this->wersja = '0.1'; } public function setSess( $id ) { $this->sess = $id; } public function showUserInfo() { echo $this->sess->user; } } class Session { public $user; function __construct( $user = 'Stachu' ) { $this->user = $user; } function setName( $user = 'Stachu' ) { $this->user = $user; } } HMT::Init(); echo HMT::$modules['core']->wersja; echo '<br />'; echo HMT::$modules['session']->user; echo '<br />'; echo HMT::$modules['session']->setName('Edek'); echo '<br /><B>Info o userze z Core</B><br />'; echo HMT::$modules['core']->showUserInfo(); ?> Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Filar Społeczności Ranmus Opublikowano 7 Maja 2009 Filar Społeczności Udostępnij Opublikowano 7 Maja 2009 Jeszcze dopisz przed deklaracją klasy HMT static oraz zabezpieczonko przed powtórną inicjalizacją i będzie gitara. :) Natomiast w klasie Session jak masz setName to dorób jeszcze getName i ukryj pole zmieniając public na private. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Kofel Opublikowano 7 Maja 2009 Udostępnij Opublikowano 7 Maja 2009 Możesz zrobić rejestr bądź singleton. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 7 Maja 2009 Autor Administratorzy Udostępnij Opublikowano 7 Maja 2009 To drugie rozwiązanie to chyba rejestr nie? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Filar Społeczności Ranmus Opublikowano 7 Maja 2009 Filar Społeczności Udostępnij Opublikowano 7 Maja 2009 Tak. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Rekomendowane odpowiedzi
Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto
Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.
Zarejestruj nowe konto
Załóż nowe konto. To bardzo proste!
Zarejestruj sięZaloguj się
Posiadasz już konto? Zaloguj się poniżej.
Zaloguj się