Autor Zpráva
Fisak
Profil
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
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
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
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
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);
}
ale nějak mi nefunguje další věc v této třídě
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
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
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
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");
lepší ?


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;
}

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: