Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Wywołanie obiektu na innej podstronie -wzorzec Rejestr
b3rt
post
Post #1





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 14.08.2007

Ostrzeżenie: (0%)
-----


Witam,
mam plik konfiguracyjny header.php
i stronę index.php, login.php, registry.php

REGISTRY.php

jest to wzorzec projektowy Rejestr - działa na zasadzie Singleton

  1. abstract class Registry {
  2.  
  3. private static $_tools = array();
  4.  
  5. public static function set($name, $value) {
  6. self::$_tools[$name] = $value;
  7. }
  8.  
  9. public static function get($name) {
  10. return (isset(self::$_tools[$name]) ? self::$_tools[$name] : null);
  11. }
  12.  
  13. }


HEADER.php

  1. $db = new PDO('...');
  2. Registry::set('db', $db);


USER.php

  1. class User
  2. {
  3. ...
  4.  
  5.  
  6. function __construct($login, $haslo) {
  7. $m = Registry::get('db')->query("SELECT * FROM users WHERE `username`='$login', `password`='$haslo' LIMIT 1")->fetch();


W klasie User mogę używać obiektu db do łączenia się z bazą.


LOGIN.php
  1.  
  2. $user = new User($login, $password);
  3. Registry::set('user', $user);


W tym przypadku gdy dodaję obiekt do obiektu Register nie jest on dostępny w każdym miejscu np. w INDEX.php gdzie chciałbym wykonać pewną metodę z klasy User.
W jaki sposób uczynić $user dostępnym w każdym miejscu ? Gdybym w HEADER.php utworzył $user = new User($login, $password) i dodał do Registry to pewnie by zadziałało ale obiekt User ma powstać w chwili zalogowania ... jak rozwiązać taką sytuację ? Jak to się powinno poprawnie robić? Proszę o radę.

Ten post edytował b3rt 18.10.2012, 20:31:03
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
b3rt
post
Post #2





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 14.08.2007

Ostrzeżenie: (0%)
-----


Jeśli dobrze analizuję Twój kod to wydaje mi się, że mam podobnie, problem jest taki, że np. gdy utworzyłem obiekt user i dodałem go w ten sposób:
  1. Registry::set('user', $user);


Później gdy chcę go wywołać w innym miejscu np. metoda getLogin()

  1. Registry::get('user')->getLogin();


Otrzymuję komunikat:

  1. Fatal error: Call to a member function getLogin() on a non-object in



Pytanie jest takie, czy obiekt powinienem tworzyć w jakimś głównym pliku który jestem headerem a później jest wszędzie includowany ? Czy obiekt możemy tworzyć w dowolnym miejscu i dodawać go tak jak napisałem powyżej "Registry::set('user', $user);" ?

Będę wdzięczny za pomoc

Ten post edytował b3rt 18.10.2012, 21:43:39
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 11.10.2025 - 21:40