przebudowuje caly system na OOP, do tej pory wszystko szlo jak nalezy az do dzis jak musze dobrac sie do danych klasy rozszerzajacej...
zaczynajac od podstaw, standardowo korzystam z methody __autoload(); by wykorzystywane klasy byly wgrywane automatycznie.
klasa rozruchowa jest Core(), dokladny schemat wyglada nastepująco:
PM -> Registry -> Template -> Modules -> Core ( Core rozszerza Modules, Modules rozszerza Templates etc )
W Core() dodatkowe moduly jak Db,Xml wgrywam nastepująco:
<?php private function __loadModules( $type,$sub_type=null ) { { $modules = $this->{'_core_'.$type}[$sub_type]; } else { $modules = $this->{'_core_'.$type}; } // $modules to zwykly array(), z wymienionymi glownymi klasami rozszerzajacymi // np array( 'Db','Xml','KolejnaKlasa' ); foreach ( $modules as $module ) { $module_var = $module; if(method_exists($module, 'init')) { } else { $this->_instances[$module_var] = new $module(); } { $this->$module_var = $this->_instances[$module_var]; } else { throw new PMException(); } } } ?>
natomiast w root'cie ( PM(); ), wszystkie isntancje sa wgrywane jak statyczne:
<?php public $Core; { { $class = get_class(); } { self::$instances[$class] = new $class(); } if($core) { self::$instances[$class]->Core = $core; } return self::$instances[$class]; } ?>
i teraz durne pytanie...
1. dlaczego odwolujac sie z klasy Tempates() do Core() jak uzywam "$this->Core->xxx()" wywala blad
- Notice: Trying to get property of non-object
- Fatal error: Call to a member function xxx() on a non-object
- natomiast $this->xxx() dziala bez zarzutu z malym ale, nie mam dostepny do klas rozszerzajacych Core(), gdzie jest to idiotyczne, z tej racji iz wszystko jest zdefiniowane jak statyczne w root'cie ( PM() )
2. dlaczego jak sie odwoluje z klasy roszerzajacej Core() zalozmy Url();
- w klasie Core->Db mam zdefiniowana methode safeString();
- by kazda klasa automatyczni ja dziedziczyla w PM() mam zdefiniowane safeString() z return $this->Core->Db->safeString();
- wywolanie z Core->Url->mathoda_korzystaja_z_safeString() dziala bez problemu
- wywolanie $this->safeString() z Core() wywala blad i tak we wszystkich innych klasach ktore rozszerza ;/
Jak to nie jest wytarczajaco zrozumialem sformulowane prosze o uwage, i naprawde bede wdzieczny za pomoc
