| Autor | Zpráva | ||
|---|---|---|---|
| marcus33cz Profil |
#1 · Zasláno: 15. 7. 2011, 22:58:28
Hraju si teď s jedním frameworkem. Je v něm třída (DB_Entity), která umí chytře ukládat do databáze, upravovat údaje apod.
Aby ty údaje šly ukládat, je vždy třeba definovat sloupce ($columns), jaké v tabulce jsou. Vytvořil jsem si třídy, které tuto třídu rozšiřují: abstract class User extends DB_Entity{
public $columns = array(
'username' => array(
'type' => 'varchar',
'length' => 45
),
'password' => array(
'type' => 'varchar',
'length' => 45
)
);
...
}
class Customer extends User{
...
}
class Seller extends User{
...
}
Rád bych to udělal tak, abych měl rodičovskou třídu User - v ní by byly společné věci pro zákazníka i prodejce (username, heslo, datum registrace) a pak by prodejce i zákazník měli svou vlastní třídu. V té by pro prodejce bylo třeba IČ, pro kupujícího třeba nejbližší prodejna. Tedy do pole $columns z User bych chtěl v definici Seller přidat další položky
class Seller extends User{
public $columns = tady by mělo být to z třídy User +
'companyID' => array(
'type' => 'int'
)
...
}
Zkoušel jsem to různě, ale buď mi šlo dát tam údaje jenom z User nebo jenom z Seller. Dá se to nějak udělat v definici? Do konstruktoru to můžu dát bez problému, ale moc se mi to tam nelíbí a mám takový pocit, že to tam nepatří (navíc je v tom pak bordel). Do té třídy DB_Entity to taky dávat nechci, protože musí fungovat i pro třídy, které třeba nebudou mít username apod. Díky |
||
| Alphard Profil |
#2 · Zasláno: 16. 7. 2011, 00:33:27
V definici nemůže ani spojovat pevné stringy nebo provádět triviální matematické operace, viz http://cz.php.net/manual/en/language.oop5.properties.php (invalid property declarations v example). Hodně bych se divil, kdyby šlo mergovat array...
|
||
| marcus33cz Profil |
#3 · Zasláno: 16. 7. 2011, 07:55:22
Jo, tak právě to je to, o co jsem se pokoušel. :-) Co navrhuješ? Pro každou třídu to definovat znovu?
Nechci to cpát do konstruktoru - ta array bude hodně velká. Ale zároveň nechci mít v kódu duplicity. |
||
| Alphard Profil |
#4 · Zasláno: 16. 7. 2011, 10:52:23
marcus33cz:
„Co navrhuješ? Pro každou třídu to definovat znovu?“ Já nemám v lásce ORM a hlavně duplicitní informace o tabulkách. Z názvu DB_Entity nepoznám, k čemu to patří, Zend, Doctrine? Pokud z těchto entit tabulky vytváříte, možná bych napsal vše pro každou třídu, ať je na první pohled jasné, jak to vypadá. V dokumentaci nebo fóru daného frameworku se podívejte na doporučené postupy. Váš přístup lze realizovat jedině s kontruktorem. Teď jsem si hrál s určitým nápadem if (!empty(parent::$struct) && self::$struct[0] == '::parent::')
{
unset(self::$struct[0]);
print_r(array_merge(parent::$struct, self::$struct));
} |
||
|
Časová prodleva: 15 let
|
|||
0