![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 1 385 Pomógł: 48 Dołączył: 23.05.2007 Ostrzeżenie: (0%) ![]() ![]() |
index.php
db.class.php
wywołuje funkcje dodaj z klasy upload klasa
i otrzymuje że funkcja query nie ma obiektu ;/ co nie tak? Pozdrawiam |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 375 Pomógł: 20 Dołączył: 28.07.2006 Ostrzeżenie: (0%) ![]() ![]() |
Pokaż wszystkie linijki kodu. Źle to robisz. Jeżeli klasa mysql jest nadrzędna dla upload:
Nie widzę potrzeby istnienia klasy mysql, jeżeli ma oferować te same funkcje, co MySQLi. Jeśli już chcesz ja deklarować, niech będzie podrzędną dla MySQLi. Wtedy w konstruktorze tej klasy napisz:
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 1 385 Pomógł: 48 Dołączył: 23.05.2007 Ostrzeżenie: (0%) ![]() ![]() |
nic nie dało ;/
klasa upload
|
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Przepraszam za mały offtop: "class upload extends mysql" co ma piernik do wiatraka? W jaki sposób klasa upload rozszerza klasę mysql?
|
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 1 385 Pomógł: 48 Dołączył: 23.05.2007 Ostrzeżenie: (0%) ![]() ![]() |
ok troche zamotanie, a jak to poprawić?
Ten post edytował Lejto 30.04.2009, 19:56:08 |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 304 Pomógł: 51 Dołączył: 4.02.2005 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Przekazując obiekt klasy mysql do obiektu klasy upload...
przykładowo:
A jeśli chodzi o Twoje konkretne pytanie, to w jakiś cudowny sposób metoda upload (nazwa taka sama jak klasa, a w php4 tak się zwie konstruktor) przysłania konstruktor nadklasy mysql. Zmień nazwę tej metody. Sprawdzałem to teraz i to chyba jest bug, że najpierw jest sprawdzane czy w klasie jest konstruktor o nazwie __construct, jak nie ma to o takiej samej nazwie co klasa, a jak wtedy dopiero nie ma to czy w klasie nadrzędnej jest konstruktor __construct... Wg mnie nieporządane i dziwne działanie, więc kwalifikuję to jako bug (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif) Ten post edytował -=Peter=- 30.04.2009, 22:01:28 |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 214 Pomógł: 18 Dołączył: 25.04.2009 Ostrzeżenie: (20%) ![]() ![]() |
poco dziedziczysz po klasie mysql, nie łatwiej stworzyć obiekt mysql i w konstruktorze go przesłać?, w twoim sposobie będziesz generował zbędne połączenia z bazą danych, bo każdy obiekt będzie miał swoje.
nie działa ci to bo zasłoniłeś konstruktora klasy mysql, wszędzie gdzie dziedziczysz po tej klasie w konstruktorze dodaj wpis parent :: __construct() |
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 1 385 Pomógł: 48 Dołączył: 23.05.2007 Ostrzeżenie: (0%) ![]() ![]() |
to jak mam sobie klase która ma za zadanie łączenia się z bazą dodaje ją w pliku index.php potem mam 2 klasę która dodaje coś do bazy to żeby nie robić
extends mysql { -,- to muszę za każdym razem implements Database{}? nie da się inaczej? @okitoki nie za bardzo cię rozumiem ;/ |
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 2 291 Pomógł: 156 Dołączył: 23.09.2007 Skąd: ITALY-MILAN Ostrzeżenie: (10%) ![]() ![]() |
Da sie inaczej po co tu w ogole sa potrzebne interfejsy tu masz przyklad jak takie cos zrobic: Temat: user_class__dziedziczenie ostatni post.
A jak nie robisz klase i metody statyczne wtedy nie musisz robic instancji danej klasy jednak jest to zbedne przy klasie dla Mysql bo za kazdym razem bedzie musial tworzyc i zamykac polaczenie. A jak juz tak bardzo chcesz dziedziczyc to tak jak ci WebCm napisal uzywaj metod z klasy bazowej za pomoca parent:: |
|
|
![]()
Post
#10
|
|
Grupa: Zarejestrowani Postów: 1 385 Pomógł: 48 Dołączył: 23.05.2007 Ostrzeżenie: (0%) ![]() ![]() |
ok dzięki, jakoś sobie poradzę
|
|
|
![]()
Post
#11
|
|
Grupa: Zarejestrowani Postów: 214 Pomógł: 18 Dołączył: 25.04.2009 Ostrzeżenie: (20%) ![]() ![]() |
to jak mam sobie klase która ma za zadanie łączenia się z bazą dodaje ją w pliku index.php potem mam 2 klasę która dodaje coś do bazy to żeby nie robić extends mysql { -,- to muszę za każdym razem implements Database{}? nie da się inaczej? @okitoki nie za bardzo cię rozumiem ;/ nie musisz za każdym razem implementować database tworzysz obiekt $sql = new mysql(); // on już się łączy z bazą ma tam jakąś metode query jak chcesz to przekazać do innego obiektu to robisz $inny_obiekt = new inna_klasa($sql) a klasa wygląda następująco Kod class inna_klasa { private $sql; public function __construct($sql) { $this->sql = $sql; } } i w ten oto sposób w 2giej klasie masz zaimplementowanego sql-a. jak zrobisz poprzez dziedziczenie tak jak na twoim przykładzie to klasa gdzie dziedziczysz musi wyglądać następująco Kod class upload extends mysql {
public function __construct() { parent::__construct() } public function dodaj($n) { $result = $this->_lacz->query('zapytanie'); } fclose($uchwyt); } } |
|
|
![]()
Post
#12
|
|
Grupa: Zarejestrowani Postów: 2 291 Pomógł: 156 Dołączył: 23.09.2007 Skąd: ITALY-MILAN Ostrzeżenie: (10%) ![]() ![]() |
Kod public function __construct($sql) { $this->sql = $sql; } Chyba jednak nie tak jak cos to: Kod public function __construct(KlasaSql $sql)
{ $this -> sql = $sql; } |
|
|
![]()
Post
#13
|
|
Grupa: Zarejestrowani Postów: 260 Pomógł: 41 Dołączył: 6.04.2009 Skąd: Gdańsk/okolice Ostrzeżenie: (0%) ![]() ![]() |
marcio, a czym różnią się te dwa konstruktory, poza tym że jeden jest bardziej 'strict'?
Działają identycznie przecież... |
|
|
![]()
Post
#14
|
|
Grupa: Zarejestrowani Postów: 2 291 Pomógł: 156 Dołączył: 23.09.2007 Skąd: ITALY-MILAN Ostrzeżenie: (10%) ![]() ![]() |
Jak moze dzialac skoro nie podajemy klasy z ktorej ma zostac przekazany obiekt?
Jesli dziala to good nie wiedzialem o tym (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif) i zwracam honor lecz dziwnie mi to wygladalo. |
|
|
![]()
Post
#15
|
|
Grupa: Zarejestrowani Postów: 214 Pomógł: 18 Dołączył: 25.04.2009 Ostrzeżenie: (20%) ![]() ![]() |
działają good (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) , jak określisz klase, to tylko obiekt tej klasy będziesz mógł tam przesłać, jeżeli nie określisz klasy, to tworzysz klasy baza_danych1, baza_danych2, ważne by miały metody i pola te same, w ten sposób możesz działać na różnych silnikach bazodanowych i nie tylko
|
|
|
![]()
Post
#16
|
|
Grupa: Zarejestrowani Postów: 1 385 Pomógł: 48 Dołączył: 23.05.2007 Ostrzeżenie: (0%) ![]() ![]() |
ok dzięki trochę mi się rozjaśniło (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
|
|
|
![]()
Post
#17
|
|
Grupa: Zarejestrowani Postów: 17 Pomógł: 6 Dołączył: 11.11.2005 Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#18
|
|
Grupa: Zarejestrowani Postów: 260 Pomógł: 41 Dołączył: 6.04.2009 Skąd: Gdańsk/okolice Ostrzeżenie: (0%) ![]() ![]() |
@ndx - zgoda, ale to nie jest aż taki znowu błąd - generalnie w przypadku implementacji takiej klasy wszystko zależy od programisty, więc jeśli tam się pojawi cokolwiek innego niż instancja klasy to znaczy tyle, że gdzieś wcześniej jest błąd.
W żadnym przypadku nie twierdze kod KlasaSql $sql jest błędne, ale po prostu w tym przypadku wszystko powinno być na tyle hermetyczne żeby nic innego się nie pojawiło poza instancją odpowiedniej klasy. |
|
|
![]()
Post
#19
|
|
Grupa: Zarejestrowani Postów: 214 Pomógł: 18 Dołączył: 25.04.2009 Ostrzeżenie: (20%) ![]() ![]() |
Zobacz co sie stanie jak $sql nie bedzie instancja KlasaSql tylko np. stringiem bez znaczenia, czy będzie stricte czy nie będzie błąd jak podepniesz stringa, tyle że na innych liniach i inny błąd (IMG:http://forum.php.pl/style_emoticons/default/exclamation.gif) |
|
|
![]()
Post
#20
|
|
Grupa: Zarejestrowani Postów: 2 291 Pomógł: 156 Dołączył: 23.09.2007 Skąd: ITALY-MILAN Ostrzeżenie: (10%) ![]() ![]() |
Ale wtedy wiadomo ze trzeba podac instancje klasy i nie trzeba analizowac kodu ani rozmyslac.
|
|
|
![]() ![]() |
![]() |
Aktualny czas: 22.08.2025 - 22:28 |