daGrevis Posted November 27, 2010 Author Report Share Posted November 27, 2010 Tik tikko atkal apguvu sintaksi objektiem. Izgāju cauri šim - http://www.phpro.org/tutorials/Object-Oriented-Programming-with-PHP.html, nedaudz paeksperimentēju. =) Pietam runāju ar vienu jaunu programmētāju (tādu paši kā Es) par to, ko viņš domā par objektiem. Secinājums tāds, ka Mēs abi nesaprotam kā tagad objekti ir jāizmanto praksē...! Lūk piemērs iz dzīves. Vēlos izveidot vienkāršu lietotāju sistēmu. Pirms tam tas bija apmēram tā... Reģistrācija: Fails, kurā ir HTML formas ar "username", "password" laukiem. Ar POST metodi info tiek padots tālāk uz citu failu kurā tiek validēti dati... Ja dati ir ok, tad saglabājam tos datubāzē + izvadam, ka reģistrācija veiksmīga. Pretēja gadījumā izvadām kļūdu. Ielogošanās: Fails, kurā ir HTML formas ar "username", "password" laukiem. Ar POST metodi info tiek padots tālāk uz citu failu kurā tiek validēti dati + pārbaudīts, vai "username"/"password" kombo der... Ja dati ir ok, tad saglabājam sesiju, ka lietotājs ir ielogojies + izvadam, ka ielogošanās veiksmīga. Pretēja gadījumā izvadām kļūdu. Jebkura lapa ar ielogošanās nepieciešamību: if( isSet( $_SESSION['signed_in'] ) ) {} Kā tas izskatās ar OO? =) P.S. Atvainojos par Saviem dažiem stulbajiem bez sakarīgajiem postiem. Quote Link to comment Share on other sites More sharing options...
Kverkagambo Posted November 27, 2010 Report Share Posted November 27, 2010 Izskatīsies tāpat. Labāk dari tā: neklausies, ko visi saka, ja tev vajag uztaisīt html šablonu sistēmu, vienkārši to uztaisi, nenovērs uzmanību uz OOP vai MVC vai citiem saīsinājumiem. Kad vajadzēs, pārtaisīsi gatavās funkcijas par klasi. Quote Link to comment Share on other sites More sharing options...
daGrevis Posted December 6, 2010 Author Report Share Posted December 6, 2010 Nuuu ... es darītu apmēram šitā. class Template{ protected $_path; protected $_pool = array(); public function __construct( $path ){ $this->_path = $path; } public function render(){ extract ( $this->_pool , EXTR_OVERWRITE ); ob_start(); try{ include $this->_path; }catch( Exception $e ){ ob_end_clean(); throw $e; } return ob_get_clean(); } public function assign( $name , $variable ){ $this ->_pool[$name] = $variable; } }; Sapratu kā pielietot, tik stulbs neesmu. =) Nesapratu, vai tāds variants (runāju par metodi render()) ir ātrāks (varbūt labāks?) par... $a = 'value1'; $b = 'value2'; $c = 'value3'; require 'templates/index.php'; ...un pēc tam pa tiešo mainīgos izvadam. =) Gribu dzirdēt plusus un mīnusus, lūdzu. Tikai mācos. Pietam, ja godīgi, nesapratu precīzi ko tā funkcija dara ar datiem, jo neesmu saskāries ar extract() vai ob...(), un try {} catch {}... =[ Quote Link to comment Share on other sites More sharing options...
rATRIJS Posted December 6, 2010 Report Share Posted December 6, 2010 PHP docs labi visu paskaidro: http://uk2.php.net/extract http://php.net/manual/en/book.outcontrol.php http://php.net/manual/en/language.exceptions.php Aatraaks noteikti nav. Labaaks ar to ka tas ir abstraktaaks. Quote Link to comment Share on other sites More sharing options...
daGrevis Posted December 6, 2010 Author Report Share Posted December 6, 2010 Un ko tas abstraktums dod? O.o Quote Link to comment Share on other sites More sharing options...
rATRIJS Posted December 6, 2010 Report Share Posted December 6, 2010 (edited) Pluss taads, ka tur var likt iekshaa logjiku, kas atbild tikai par templeitiem, piemeeram: class Template { public function __construct($path) { if(!file_exists(TEMPLATE_PATH . $path)) throw new TemplateNotFoundException("Template '$path' wasn't found"); } ... } Tiesa es netaisiitu taadaa veidaa, bet gan nedaudz savaadaak. Eniivei: http://en.wikipedia.org/wiki/Abstraction_(computer_science) Edited December 6, 2010 by rATRIJS Quote Link to comment Share on other sites More sharing options...
Kaklz Posted December 6, 2010 Report Share Posted December 6, 2010 Ja vien tu esi tam gatavs, tad silti iesaku palasīt un izkost kādu grāmatu no sērijas par "php design patterns", kaut vai šo: http://www.amazon.com/PHP-Architects-Guide-Design-Patterns/dp/0973589825 Ja vien iedziļināsies grāmatas saturā, tad arī viss nostāsies savās vietās un sapratīsi pasākuma jēgu. Taisīt klases tikai tāpēc, lai tu varētu CV ierakstīt, ka proti OOP ir lieki. Quote Link to comment Share on other sites More sharing options...
mefisto Posted December 6, 2010 Report Share Posted December 6, 2010 Kā lai paskaidro cilvekam, kurš nezin, kas ir abstrakcija !? Jā tavs variants noteikti būtu ātrāks ( ļoti, ļoti nedaudz , bet pilnīgi noteikti ātraks ). Bet tas īsti nav mērķis. Doma ir izveidot struktūru, kas saņem jebkādu skaitu vērtību , ar jebkādiem nosaukumiem un ievieto tos templeitā tadā veidā, lai tās neietekmētu pārējo kodu. Ņem par piemēru to tavu kodu. Viss ir ok, ja tev ir viens tāds fails, bet kas notiek ja tev ir 40 templeiti ? Tad tev papildus templeitiem ir vēl vismaz 40 tādu failu. Šinī gadījumā abstrakcija ir veidota visiem šiem 40+ failiem, un spēj realizēt tos visus. Quote Link to comment Share on other sites More sharing options...
daGrevis Posted December 7, 2010 Author Report Share Posted December 7, 2010 Paldies visiem par atbildēm. =) Quote Link to comment Share on other sites More sharing options...
mefisto Posted December 10, 2010 Report Share Posted December 10, 2010 Tīriju bookmarkus un atradu šito : http://codeangel.org/articles/simple-php-template-engine.html Tā laikam bijā tā lapa, kur es atradu šito ideju. Quote Link to comment Share on other sites More sharing options...
ezis Posted December 11, 2010 Report Share Posted December 11, 2010 umm, varbut autajums ne pa temu, bet cik loti ir nepieciesams izmantot tos ob un ka ir pareizak? Parasti piemeros, kad rendere, tad ir ob_start(); un pectam beigas ob_get_clean(); Es agrak dariju ta, ka idex.php sakuma liku ob_start(); un tad beigas ob_flush(); Tas ari bija viss, ko no ob izmantoju.. Help, apskaidro kads mani vairak.. Quote Link to comment Share on other sites More sharing options...
briedis Posted December 11, 2010 Report Share Posted December 11, 2010 Es iztieku bez visādiem ob_, vnk iekļauju skata failu pašās beigās un ekstraktorju kontrolierī savāktos mainīgos: if(file_exists($controller->getViewPath())){ extract($controller->getViewData()); require($controller->getViewPath()); } Quote Link to comment Share on other sites More sharing options...
mefisto Posted December 11, 2010 Report Share Posted December 11, 2010 ob_* funkcijas vienkārši dod kontroli pār saturu ko izdrukā serveris. Vienmēr ir citi varianti. Quote Link to comment Share on other sites More sharing options...
Blitz Posted December 12, 2010 Report Share Posted December 12, 2010 (edited) Ja autora mēŗkis bij vienkārši strukturēt kodu, tad bez oop... (mana mvc parodija) failu struktura: /includes/controller/test.php //php (logika) /includes/view/template1/test.php //html+php variabli (skats) /includes/functions.php //visas funkcijas, un darbs ar datu bazi (kautkas lidzigs modelim) /index.php index.php <?php require_once "./includes/functions.php"; switch($page) { case 'test': $include='test.php'; break; } require_once "./includes/controller/$include"; ?> <html> <head></head> <body> <?php require_once "./includes/view/template1/$include"; ?> </body> functions.php function user_add($name) { //mysql } /controller/test.php if(isset($_POST['user'])) { //validate user user_add(); header(); //nekads izvads uz brovseri nav, taka var mierigi sutit ari hederus, piemram uz lapu "lietojs veiksmigi pievienots"; } /view/template1/test.php <h1>jauns lietotajs</h1> <form action="" method="post"> ... </form> <?=$kautkas_no_controller;?> Visaz man palidz kodu sastrukturet daudz parskatamak un ertak, rezultata viss liekas ari vienkarshak. * darbs ar datu bazi tiaki caur funkcijam. funkciju nosaukumi logiski izveidoti, piemeram ja darbs ar lietotaju tad user_add, user_mod, user_delete, user_list, user_single utt. * visas logika, datu apstrade, validacija utt. controller daļā, bez neviena satura izvada, visu glabajam mainigajos. * html un mainigo izvads tikai view dalaa. tai skaita kludu zinojumi utt. Edited December 12, 2010 by Blitz Quote Link to comment Share on other sites More sharing options...
codez Posted December 12, 2010 Report Share Posted December 12, 2010 Es iztieku bez visādiem ob_, vnk iekļauju skata failu pašās beigās un ekstraktorju kontrolierī savāktos mainīgos: Vienkāršā gadījumā tā var darīt, bet ja vajadzīgs būvēt hirearhālu sistēmu, kur tev ir viens templeits un tā saturs ir jāiekļauj pa vidu cita kontrolera templeitam. Tad šis variants nederēs. Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.