Autor | Zpráva | ||
---|---|---|---|
_fantomas Profil |
#1 · Zasláno: 28. 12. 2015, 15:01:23
Ahoj, mám problém, mám triedu databazy kde funkcia na pripojenie sa volá
public static function connect(); Pri volani tej triedy dam len Database::conect(); a tu je problém že potrebujem spustíť najprv __construct potom ten connect a potom __destruct Ale to akosi neviem ak používam statické funkcie môžte mi poradiť? |
||
Antik4 Profil |
#2 · Zasláno: 28. 12. 2015, 17:51:29
Může to vypadat následovně:
class Database { public function __construct() {} public static function connect() { $c = new self; // Konstruktor $c->__destruct(); // Destruktor, zavolá se 2x } public function __destruct {} } Lepší by bylo napsat k čemu to potřebuješ, aby ses tomu mohl vyhnout. |
||
Alphard Profil |
#3 · Zasláno: 28. 12. 2015, 23:55:58
Snažím se ten dotaz pochopit nějak komplexněji, ale je napsán dost zmateně. Klasické řešení držení připojení k databázi ve statickém registru je návrhový vzor singleton. Řekněme
class Database { private static $connection; public static function getConnection() { if (self::$connection === null) { self::$connection = self::connect(); } return self::$connection; } public static function destruct() { // běžná veřejná statická třída, není to automaticky volaný destruktor // ... } } a pak by se volalo Database::getConnection()->query('...');
V tomto případě se nikdy destruktor nezavolá, protože nebyla vytvořena instance. Maximálně můžete někam do shutdown části aplikace dát Database::destruct() a explicitně ho zavolat.
Destruktor se zavolá pouze při uklízení instance, to znamená, že je třeba nejdříve vytvořit instanci. class DbConnection { private $connection; public function __construct() { $this->connection = /*...*/; } public function __destruct() { // tenhle destruktor se zavolá // úklid } } class Database { private static $connection; public static function getConnection() { if (self::$connection === null) { self::$connection = new DbConnection(); } return self::$connection; } } V tomto případě by se měl zavolat destruktor instance třídy DbConenction. Před spoléháním se na destruktor bych ale varoval, viz Diskuse JPW: Lze se spolehnout na destruktor?. |
||
Časová prodleva: 9 let
|
0