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
adek140
post
Post #2





Grupa: Zarejestrowani
Postów: 2
Pomógł: 0
Dołączył: 31.07.2009

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


niestety wciąż nie potrafie sobie poradzić (IMG:style_emoticons/default/sad.gif)

przedstawie wszystko od początku

index.php
  1. <?php
  2.  
  3. include ('includes/core.php');
  4.  
  5. $core = new core;
  6. $core->initComponents();
  7.  
  8. $core->config->test();
  9.  
  10.  
  11. ?>


includes/core.php
  1. <?php
  2.  
  3. class core
  4. {
  5.  
  6. public function _load($name)
  7. {
  8. include_once('includes/'.$name.'.php');
  9. $this->$name = new $name($core);
  10. }
  11.  
  12. public function initComponents()
  13. {
  14. $this->_load('config');
  15. $this->_load('maile');
  16. }
  17. }
  18.  
  19. ?>


includes/config.php
  1. <?php
  2. class config {
  3.  
  4. private $maile;
  5.  
  6. public function __construct($core) {
  7. $this->maile = $core->maile;
  8. }
  9.  
  10. public function test() {
  11. echo 'krok 1 z klasy config <br>';
  12. $this->maile->test2();
  13. }
  14. }
  15. ?>


includes/maile.php
  1. <?php
  2. class maile
  3. {
  4. private $config;
  5.  
  6. public function __construct($core)
  7. {
  8. $this->config = $core->config;
  9. }
  10.  
  11. public function test2()
  12. {
  13. echo 'krok 2 z klasy maile';
  14. }
  15. }
  16. ?>


efekt

Kod
krok 1 z klasy config

Fatal error: Call to a member function test2() on a non-object in H:\Serwer\tescik\includes\config.php on line 12


mógłby mi ktoś podpowiedzieć gdzie popełniam błąd? domyślam się, że w którymś miejscu przy przekazywaniu obiektu core, ale, jak pisałem, jestem początkujący i nie potrafię sam sobie z tym poradzić, mimo wielu prób metodą 'prób i błędów'

pozdrawiam (IMG:style_emoticons/default/worriedsmiley.gif)
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: 14.10.2025 - 09:15