![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
![]() Grupa: Zarejestrowani Postów: 3 Pomógł: 0 Dołączył: 21.09.2008 Ostrzeżenie: (0%) ![]() ![]() |
Witajcie!
Od niedawna zacząłem pisać w obiektowym php5. I napotkałem pewien problem, którego nie potrafię ominąć. Otóż to chciałbym używać połączenia MySQLi we wszystkich klasach, które mam zdefiniowane w mysqli_class.php. Próbowałem używać singletonu, ale gdy odwoływałem się do zapytania to pokazywało, że w klasie nie ma takiej metody :/ Niżej przedstawie wam kod, który miał pobierać dane z mysql 1. Klasa mysqli_class.php CODE <?php class mysql { static private $mysql; private $sql; function __construct() { self::$mysql = $this; self::$mysql = new mysqli ("localhost","root","","mestari"); } static public function getReferenceMysql() { return self::$mysql; } } ?> i blocks.php CODE <?php class blocks { private $mysql; function __construct() { $this -> mysql = mysql::getReferenceMysql(); } public function getBlocks($id) { $block_query = "SELECT * FROM blocks WHERE block_id = ".$id. ""; if($result = $this -> mysql -> query($block_query)) { /** * Przetwarzanie danych */ } } } $id = $_GET['id']; $block = new blocks(); $block -> getBlocks($id); ?> To wszystko daje w rezultacie błąd Fatal error: Call to a member function query() on a non-object in D:\bartosz\Projekty\www\system\classes\blocks.php on line 15 |
|
|
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 45 Pomógł: 7 Dołączył: 25.12.2004 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Źle zrozumiałeś i wykorzystałeś wzorzec Singleton. Odsyłam do Wikipedii, a w szczególności do diagramu UML.
Wywala taki a nie inny błąd, ponieważ nigdzie nie wykorzystujesz konstruktora klasy mysql, gdzie tworzysz obiekt klasy mysqli. Prawidłowo wykorzystany Singleton:
-------------------- "Yes, experience matters. No, one year repeated fifteen times does not count."
bartoszlugowski.com |
|
|
![]()
Post
#3
|
|
![]() Grupa: Zarejestrowani Postów: 3 Pomógł: 0 Dołączył: 21.09.2008 Ostrzeżenie: (0%) ![]() ![]() |
Zmieniłem caluśki singleton tak jak mówiłeś. I działa
![]() ![]() |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 14.08.2025 - 12:06 |