ďťż
Podstrony
|
telcocafeWitam. Zacząłem się uczyć obiektowego PHP i napotkałem pewien problem:<?php class DBMySQL { public $host; public $login; public $haslo; public $dbnazwa; public $connection; public function aktywny() { if ($this->connection) return true; else return false; } public function polaczenie() { return $this->connection; } public function polacz() { $this->connection = mysql_connect($this->host, $this->login, $this->haslo); } public function rozlacz() { mysql_close($this->connection); } } $mysql = new DBMySQL; $mysql->host = 'localhost'; $mysql->login = 'root'; $mysql->haslo = 'krasnal'; $mysql->dbnazwa = 'krasnal'; if($mysql->aktywny == true) print 1; else print 0; $mysql->polacz(); if($mysql->aktywny == true) print 1; else print 0; $mysql->rozlacz(); if($mysql->aktywny == true) print 1; else print 0; ?> Chodzi o trzy warunki na samym dole: if($mysql->aktywny == true) print 1; else print 0; Powinny mi się wyświetlić cyferki 010, a tym czasem otrzymuję 000. /Połączenie z MySQL działa poprawnie. //edit. jeszcze jedno. W FAQ znalazlem, że do klasy odwołujemy się klasa::cos; Czym różni sie :: od -> Użytkownik DJ Mentos edytował ten post 14 kwiecień 2009, 16:27 z php.net, mysql_connect: Zwracane wartości Zwraca identyfikator połączenia MySQL w przypadku sukcesu, lub FALSE w przypadku porażki. Wiecej: http://pl.php.net/mysql_connect Także nie zwróci Ci true ;) no fakt. ale napisane, że jak nie połączy to daje False. Więc przerobiłem: public function aktywny() { if (!$this->connection) return false; else return true; } Doszedł "not" i zmieniona kolejność i teoretycznie powinno działać, a dalej same zera. Czym różni sie :: od -> Za pomocą -> odwołujesz się do obiektu (instancji klasy), zaś za pomocą :: do elementów samej klasy, np. statycznych metod, stałych... Jest różnica między $obiekt->zmienna a Klasa::JAKAS_STALA Widzę niekonsekwencję w kodzie. Przecież aktywny() jest metodą, a nie własnością! W funkcji polacz() po prostu ustaw:$this->aktywny = true; //albo false, jeśli połączenie nie powiedzie sięZaś funkcję aktywny() zamień na zmienną publiczną. Włącz wyświetlanie wszystkich błędów - E_STRICT wraz z E_ALL i będziesz widział, co jest nie tak. Użytkownik Ferrari edytował ten post 14 kwiecień 2009, 19:49 przy używaniu klasa::funkcja nie musisz tworzyć obiektu (kiedy nie masz zmiennych w klasie) :) Ale jest to bezsensowne i mija się z celowością objektowego PHP. Hmm... EUREKA!!! if($mysql->aktywny() == true) print 1; else print 0; Odwołujesz się do funkcji, nie do wskaźnika obiektu, stąd problem. Proponuję dorobic do funkcji rozlacz: $this->connection = false; gdyż mysql_close zwraca TRUE w wyniku powodzenia akcji rozłączenia Użytkownik Petermechanic edytował ten post 14 kwiecień 2009, 19:53 tak... "literówka" :D ale 011 też mnie nie satysfakcjonuje. :) skoro mysql_close() zamyka połączenie to dlaczego aktywny() wciaz zwraca true? //edit. dziękuje :D juz mi odpowiedziałeś. Użytkownik DJ Mentos edytował ten post 14 kwiecień 2009, 19:55 przeczytaj powyżej: Proponuję dorobic do funkcji rozlacz: $this->connection = false; gdyż mysql_close zwraca TRUE w wyniku powodzenia akcji rozłączenia |
|||
Sitedesign by AltusUmbrae. |