john.brown Posted March 20, 2006 Report Share Posted March 20, 2006 (edited) Ir man funkcija, kura kaut ko dara un atgriež referenci uz kaut ko. Viss ir jauki, kamēr process notiek. Tak es gribu pārbaudīt to darāmo, un neveiksmes gadījumā atgiezt teiksim, false: if($ref = & foo($value)) { kaut ko daram... } else { ziņojam par kļūdu... } function & foo($value) { if(! $value) return false; return $value; } Tādā veidā viņš lamājas, un pilnīgi loģiski, ka funkcijai esot jāatgriež reference. A kā pareizi to realizēt? Edited March 20, 2006 by john.brown Link to comment Share on other sites More sharing options...
bubu Posted March 20, 2006 Report Share Posted March 20, 2006 Kam tev kautko tik dīvainu vajag? Iesaku padomāt, vai var labāk un smukāk uzrakstīt šādu kodu. Link to comment Share on other sites More sharing options...
Delfins Posted March 21, 2006 Report Share Posted March 21, 2006 Izmantojam callback principu function doSuff( &$data ) { $data = new stdClass; .... $ret = ( .. ) ? true : false; return $ret; } if (doStuff( $obj )) { // apstrādājam $obj } Link to comment Share on other sites More sharing options...
john.brown Posted March 21, 2006 Author Report Share Posted March 21, 2006 (edited) 2 Delfins Paldies, laikam apmēram sapratu, rakšu :) 2 bubu Tas kods nebija domāts kā konkrēti kur izmantojams, tik situācijas ilustrācijai. Konkrēti vajag sekojošu. Funkcija atgriež referenci uz pieprasītās klases objektu. Ja tāda nav, mēģina to izveidot, un atgriezt referenci. Ja neatrod attiecīgo klasi, kaut kā par to paziņo izsaucējam. Realizācija pašlaik tāda: class Loader { function & LoadModule($mod_class) { static $mod_objects = array(); // parbaudam vai objekts jau nav if(isset($mod_objects[$mod_class])) return $mod_objects[$mod_class]; // parbaudit vai klase eksiste if(! class_exists($mod_class)) { // ja ne, includojam klases failu $installed_mods = & Singletone::instance('InstalledMods'); if(!$installed_mods->include_class($mod_class)) return false; } $mod_objects[$mod_class] = new $mod_class(); return $mod_objects[$mod_class]; } } Edited March 21, 2006 by john.brown Link to comment Share on other sites More sharing options...
Delfins Posted March 21, 2006 Report Share Posted March 21, 2006 (edited) Kāpēc tik sarežģīti - N klases, lai kaut ko ielādētu? function & loadModule($classId) { $OBJS = & $GLOBALS['_APP_OBJS']; if (empty($OBJS[$classId])) { if (!class_exists($classId)) include_once 'classes/'.$classId.'.class.php'; if (!class_exists($classId)) return NULL; $OBJS[$classId] = new $classId(); } return $OBJS[$classId]; } Edited March 21, 2006 by Delfins Link to comment Share on other sites More sharing options...
john.brown Posted March 21, 2006 Author Report Share Posted March 21, 2006 Nu, zināma doma, kāpēc tik sarežģīti ir ;) Tavā variantā man iepriekš vajag zināt, kur atrodas vajadzīgā klasīte. A ja es to nezinu? Man class InstalledMods ņem no db visus nepieciešamos datus par moduli, un izmantoju viņu arī citviet. class Loader ir visu viņa veidoto klašu vecāks, un satur vēl kopējo visiem bērniem interfeisu... Singletone izpilda to, kas nosaukumā, arī priekš vairākām klasēm... Nu nez... Domāju, vienīgi, vai ir īsti labi glabāt instances tanī statiskajā variablī, varbūt $_GLOBALS ir labāk? Topiks pamāzām pārceļo uz OOP tēmu :) Link to comment Share on other sites More sharing options...
bubu Posted March 21, 2006 Report Share Posted March 21, 2006 Starp statisku variabli vai $_GLOBALS nav gandrīz nekādas atšķirības. Vienīgā ir tāda, ka no ārpuses (ne no pašas fjas) statiska variabļa gadījumā to nevarēs aiztikt, taču $_GLOBALS gan varēs. Tātad statisks variablis ir drošāks. Link to comment Share on other sites More sharing options...
KAC Posted March 21, 2006 Report Share Posted March 21, 2006 john.brown: jaa, un kad kaadam citam tavaa putraa vajadzees iebraukt? Link to comment Share on other sites More sharing options...
john.brown Posted March 21, 2006 Author Report Share Posted March 21, 2006 Citam manā putrā iebraukt būs tāpat, vai pat vieglāk (ja ir pie oop pieradis), kā jebkurā citā putrā :) Dokumentēšanas vaina, un oop dokumentēt ir stipri vieglāk, kā procedūras. Priekš tā viņš ar ir domāts, zināmā mērā... Link to comment Share on other sites More sharing options...
KAC Posted March 22, 2006 Report Share Posted March 22, 2006 nuu ... es esmu taadus oop murgus redzeejis, kas slimam kakjim ljaunaakajos murgos nav raadiijies Link to comment Share on other sites More sharing options...
john.brown Posted March 22, 2006 Author Report Share Posted March 22, 2006 Tādus pat murgus var ieraudzīt arī bez oop. Tā nav oop vaina, bet nesaprātīga projektēšana. Bet nu jau mēs fleimojam. Nav labi... Link to comment Share on other sites More sharing options...
Recommended Posts