Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP]Wywoływanie klasy w klasie
sannin
post
Post #1





Grupa: Zarejestrowani
Postów: 308
Pomógł: 13
Dołączył: 31.10.2008

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


Witam,

dopiero zaczynam swoją zabawę z obiektowym php. Teraz mam pytanie do bardziej zaawansowanych koderów czy moje rozwiązanie jest dobre. Więc tak mam folder gdzie tworzę pliki z klasami dajmy 'Mysql.class.php'. W pliku library.php ładuje wszystkie klasy

  1. <?php
  2. require('Mysql.class.php');
  3.     require('Main.class.php');
  4. ?>


w pliku system.php ładuje library.php i config.php Natomiast w pliku index.php mam

  1. <?php
  2. require('config/system.php');
  3.    
  4.     $mysql = new MySql;
  5.     $mysql->Connect($CONFIG['dbHost'], $CONFIG['dbUser'], $CONFIG['dbPassword'], $CONFIG['dbName']);
  6.    
  7. ...
  8.  
  9.     $index = new Main();
  10.     $index->prace());
  11. ?>


Teraz żeby uzyskać dostęp do mysql w klasie Main, metodzie prace mam coś takiego

  1. <?php
  2. function prace()  {    
  3.             global $mysql;
  4.            
  5.             $job = $mysql->selectToArray("tabela", "id, name", "id > 3", "");
  6.             foreach($job['name'] as $value) {
  7.                 echo $value.'
  8.     ';
  9.             }
  10.         }
  11. ?>


Czy ogólnie jest to poprawne podejście? Czy raczej wystrzegać się global? Jak to inaczej rozwiązać? Proszę mi nie proponować Zend'a itd. bo najpier chciałbym liznąć troszkę obiektówki (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Pozdrawiam i z góry dziękuje za pomoc.
Powód edycji: Proszę używać tagu [PHP] do umieszczania kodu PHP. Dodane także tagi do tematu.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
sannin
post
Post #2





Grupa: Zarejestrowani
Postów: 308
Pomógł: 13
Dołączył: 31.10.2008

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


Poczytałem i wydaje mi się, że już to łapie... Dosyć pomocy był ten wpis http://athlan.pl/singleton-registry-map/ tylko autor pisze tutaj, że singleton nie jest najlepszym rozwiązaniem, ale przeszukują fora widzę, że jest to kwestia bardzo sporna które rozwiązanie jest najlepsze... Robię tak... do każdej klasy dodaje

Kod
private function __construct() {
         }
         ########################################################
         public static function instance() {
             if(!self::$_oInstance instanceof self) {
                 self::$_oInstance = new self;
             }        
             return self::$_oInstance;
         }
Później wystarczy tylko
Kod
$mysql = MySql::instance();
             $zmienna = $mysql->metoda()
Z tego co rozumiem to MySql::instance(); Utworzy obiekt, a jeśli istnieje to go zwróci, dzięki temu mogę działać tą klasą po całym "systemie" bez obaw i nie muszę się martwić nadpisaniem i mam pewność, że zawsze korzystam z tego samego wywołania obiektu. Czy dobrze to rozumiem i czy jest to dobre (nienajlepsze) rozwiązanie na używanie obiektowego php? Odchodząc od tematu mam jeszcze pytanie co do config.php w którym są przetrzymywane zmienne systemowe. Czy wstawiać tam stałe, żeby były dostępne wszędzie czy zmienne i wczytywać w funkcji jak globalne? Czy może jeszcze jakoś inaczej?
Go to the top of the page
+Quote Post

Posty w temacie
- sannin   [PHP]Wywoływanie klasy w klasie   20.11.2008, 19:22:42
- - erix   CytatCzy ogólnie jest to poprawne podejście? Czy r...   20.11.2008, 19:32:37
- - l0ud   CytatSię wystrzegać. Do tego zadania doskonale spr...   20.11.2008, 19:59:13
|- - adek140   Cytat(l0ud @ 20.11.2008, 20:59:13 ) c...   31.07.2009, 15:49:11
|- - fifi209   Cytat(adek140 @ 31.07.2009, 15:49:11 ...   31.07.2009, 22:26:04
- - erix   Uzasadnij, w jaki sposób Twoje rozwiązanie jest le...   20.11.2008, 20:06:45
- - sannin   Już mniej lub więcej rozumiem o co chodzi ;p Teraz...   20.11.2008, 20:16:57
- - Mize   Takie, że przykładowo w Widoku nie masz dostępu do...   20.11.2008, 20:28:15
- - erix   Jakoś nigdy nie miałem tego typu problemów z singl...   20.11.2008, 20:42:25
- - l0ud   CytatUzasadnij, w jaki sposób Twoje rozwiązanie je...   20.11.2008, 21:24:40
- - sannin   Trochę poczytałem, nie wiem czy zrozumiałem ;d ale...   20.11.2008, 21:27:06
- - erix   CytatTak jak chociażby Mize powiedział, nie mogę n...   20.11.2008, 21:32:11
- - sannin   Czy jest ktoś w stanie mi pomóc zamiast się wykłóc...   20.11.2008, 22:07:39
- - erix   CytatW klasach muszę natomiast robić tak A zwykła ...   20.11.2008, 22:51:57
- - sannin   Działa, tylko że wtedy muszę od now...   20.11.2008, 22:57:59
- - erix   Później $mysql->metoda. Z dwukropkiem wywo...   21.11.2008, 16:19:09
- - sannin   Poczytałem i wydaje mi się, że już to łapie... Dos...   21.11.2008, 19:51:48
- - erix   Cytattylko autor pisze tutaj, że singleton nie jes...   21.11.2008, 22:13:10
- - l0ud   CytatOdchodząc od tematu mam jeszcze pytanie co do...   21.11.2008, 22:40:45
- - sannin   Cytat(l0ud @ 21.11.2008, 22:40:45 ) T...   21.11.2008, 23:56:32
- - erix   To już jak Tobie wygodniej. Choć dobrym sposobem...   22.11.2008, 10:38:37
- - TrevorGryffits   No tak. A gdzie deklarujesz zmienną $obj?   31.07.2009, 20:32:30
- - adek140   niestety wciąż nie potrafie sobie poradzić prze...   18.08.2009, 16:37:31


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: 13.10.2025 - 15:56