Post
#1
|
|
|
Grupa: Zarejestrowani Postów: 27 Pomógł: 0 Dołączył: 14.05.2003 Ostrzeżenie: (0%)
|
Mam nastepujacy problem: otoz pisze sobie cos na ksztalt silnika strony, zdecydowalem sie na php5, mam klase kernel:
[php:1:7357c021bb]<?php class Kernel { public $objDB = null; public $objConfig = null; function __construct() { $this->objDB = new DB; $this->objConfig = new Config( $this ); $this->objDB->Connect( 'tutaj parametry polaczenia' ); } } ?>[/php:1:7357c021bb] Oczywiscie klasa jest bardziej rozbudowana, ale chce zilurtrowac tylko problem - jadro tworzy obiekt Config i obiekt DB - config jest pobierany z bazy danych, dlatego do obiektu Config przekazuje referencje jadra systemu, aby mogl wykonac sobie metody sterownika bazy danych. Klasa Config wyglada w uproszczeniu tak: [php:1:7357c021bb]<?php class Config { private $objKernel = null; public $arrVars = array(); function __construct( $objKernel ) { $this->objKernel = $objKernel; $this->Load(); } function Load() { $this->objKernel->objDB->Query( 'SELECT config_name, config_value FROM ' . CONFIG_TABLE ); while( $arrRow = $this->objKernel->objDB->FetchAssoc() ) { $this->arrVars[$arrRow['config_name']] = $arrRow['config_value']; } } } ?>[/php:1:7357c021bb] Wszystko wyglada w porzadku, z tym, ze wywolanie metod bazy danych z wewnatrz obiektu Config nic nie daje, jesli wywoluje je luzem, tworzac jakis nowy plik php i umieszczajac w nim kod: [php:1:7357c021bb]<?php include 'kernel.php'; $objKernel = new Kernel; $objKernel->objDB->Query('zapytanie'); $arrRow = $objKernel->objDB->FetchRow(); ?>[/php:1:7357c021bb] to wszystko jest ok, w $arrRow mam dane, ale niestety jesli proboje zrobic to samo wewnatrz jakiegos obiektu do ktorego przekazalem obiekt jadra, to nie otrzymuje zadnego wyniku. |
|
|
|
![]() |
Post
#2
|
|
|
Grupa: Zarejestrowani Postów: 27 Pomógł: 0 Dołączył: 14.05.2003 Ostrzeżenie: (0%)
|
Hmm, zbadalem troche sprawe, i okazalo sie, ze klopoty sa tylko z wykonaniem funkcji mysql_query z obiektu sterownika. Sprecyzuje bardziej swoje pytanie:
Dlaczego ten kod działa dobrze: [php:1:f71035654e]<?php // plik index.php include 'kernel.php'; $objKernel = new Kernel; $objKernel->objDB->Query( 'SELECT nazwisko FROM osoby WHERE imie='Marcin'' ); // to zadziala // tutaj dalszy kod ?>[/php:1:f71035654e] A ten kod nie dziala dobrze (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) : [php:1:f71035654e]<?php // jakas klasa class Test { private $objKernel; function __construct( $objKernelRef ) { $this->objKernel = $objKernelRef; $this->TestFunc(); } function TestFunc() { $this->objKernel->objDB->Query( 'SELECT nazwisko FROM osoby WHERE imie='Marcin'' ); // to nie dziala // tutaj jakis dalszy kod } } ?>[/php:1:f71035654e] Jak wy to widzicie ? jesli dobrze pamietam, to w php 4.x robilem takie rzeczy i dzialalo ok. |
|
|
|
Balin Problem z obiektami w php5 28.01.2004, 15:46:52
Hammer A nie lepiej zadeklarować obiekt sterujący bazą da... 28.01.2004, 18:57:35
Balin Moglbym, ale mam watpliwosci czy ten kod bedzie dz... 28.01.2004, 19:53:16
Ludvik Nie szukałem informacji o tym, ale sam robiłem sys... 15.06.2004, 19:47:18 ![]() ![]() |
|
Aktualny czas: 22.12.2025 - 19:45 |