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: 13 let
|
0