Autor | Zpráva | ||
---|---|---|---|
Fisak Profil |
#1 · Zasláno: 30. 3. 2012, 11:49:34
Zdravím. Mám problém že db dotazy dělám pomocí třídy tzn. db::query_system("mysql dotaz"); a tento dotaz potřebuju hodit do jiné třídy class druha_trida { sem bych potřeboval vypsat něco z db } ovšem vypíše mi to chybu Parse error: syntax error, unexpected T_CONSTANT_ENCAPSED_STRING... nevíte jak to udělat abych mohl hodit jednu třídu do druhé ?? děkuji předem za všechny odpovědi...
|
||
Joker Profil |
#2 · Zasláno: 30. 3. 2012, 12:02:20
Třída do jiné třídy se dá promítnout dědičností, skládáním, nebo voláním metod.
Jak jsem už psal minule, doporučuji nastudovat nějakou učebnici OOP pro začátečníky. |
||
Fisak Profil |
#3 · Zasláno: 30. 3. 2012, 12:22:36 · Upravil/a: Fisak
Joker:
jo jo vím.. zkoušel sem to extends ale asi se mi to moc nepovedlo ... takže jak voláním metod ?? můžeš pls uvést příklad ?? jinak koukám neustále do manuálů na OOP jen toto sem tam nikde nenašel udělal sem class get_default_template extends db { $SQL_Template=self::query_system("SELECT type, page, skin, inc FROM page where page = '".mypage("page")."'"); ale stále mi to hlásí Parse error: syntax error, unexpected T_VARIABLE, expecting T_FUNCTION to query_system je definovaný v třídě "db" |
||
breeta Profil |
#4 · Zasláno: 30. 3. 2012, 14:18:40
No a proč ti to asi hlásí syntax error? Nastuduj základy OOP, pokud ani neznáš zápis funkce ve třídě nemá cenu něco tady rozebírat dále.
|
||
Fisak Profil |
#5 · Zasláno: 30. 3. 2012, 14:27:09
breeta:
už sem řikal že čtu na netu neustále články o OOP na rootu atd.. takže nevím proč mi to nejde :-) |
||
Ugo Profil |
jednoduše si pamatuj, že při definici tříd můžeš používat jen absolutní přiřazení, žádné funkce, proměnné, výpočty. důvodem bude asi implementace v C .. to opravdu nevím :).
dál ti v tom kódu chybí určení přístupu a případně typu (public static $var). to co chceš udělat jde až při běhu skriptu, nikoliv při inicializaci, takže buď udělat instanci a načítat data v kontruktoru a nebo udělat metodu která to do té třídy načte a tu zavolat btw. doporučuji zvážit své pojmenovávání, třída get_default_template = wtf? a proměnná $SQL_Template = jasnej zdroj překlepů, mimo to nevím proč by tahle třída měla rozřičovat databázi, dej jí v konstruktoru instanci té db a neřeš neřešitelné. :) <?php class Db { private $connection; public function connect() { $this->connection = ...; } } class Template { private $db; public function __construct(Db $db) { $this->db = $db; } public function getDefaultTemplate() { return $this->db->sql(); } } $db = new Db(); $db->connect(); $template = new Template($db); $default = $template->getDefaultTemplate() ?> nějak takto by to třeba šlo, jeslti trváš na statickym přístupu tak konstruktor nahradit fcí static setDb($db) a tu volat místo new Template() |
||
Fisak Profil |
ouč děkuji moc :-) takže řešení mýho problému:
class Template { private $db; public function __construct(db $db) { $this->db = $db; } public function sqlDefaultTemplate() { $sql = $this->db->query_system("SELECT type, page, skin, inc FROM page where page = '".mypage("page")."'"); $Data_TMP=mysql_fetch_assoc($sql); } public function template_admin() { load_page("admin/php_modules/".$this->sqlDefaultTemplate()->$Data_TMP['page']."/index.php"); //php modul administrace load_page("themes/admin/".get_current_lang()."/index.php"); //šablona s html modulem administrace } |
||
Fisak Profil |
#8 · Zasláno: 1. 4. 2012, 13:29:02
Jsem z toho vážně jelen :-) v té stejné třídě by mělo fungovat $this->sqlDefaultTemplate()->$Data_TMP['page'] nebo ne ?
|
||
Jan Tvrdík Profil |
#9 · Zasláno: 1. 4. 2012, 14:14:18
Fisak:
„Jsem z toho vážně jelen“ Nebuď jelen a radši se drž Jokerovy rady ([#2]). To co jsi napsal, je nesmysl. |
||
Fisak Profil |
#10 · Zasláno: 1. 4. 2012, 15:16:57 · Upravil/a: Fisak
Jan Tvrdík:
co je nesmysl ?? [#7] nebo [#8] ? public function sqlDefaultTemplate($string) { $sql = $this->db->query_system("SELECT type, page, skin, inc FROM page where page = '".mypage("page")."'"); $Data_TMP=mysql_fetch_assoc($sql); return $Data_TMP[$string]; } $this->sqlDefaultTemplate("page"); ještě chyba .. Catchable fatal error: Argument 1 passed to Template::__construct() must be an instance of db, none given, called vyvolání třídy: $template = new Template; a jinak chybu to píše tu public function __construct(db $db) { $this->db = $db; } |
||
Časová prodleva: 12 let
|
0