Jackal Posted April 29, 2010 Report Share Posted April 29, 2010 Ir šāda funkcija public static function setDefaults(dic $dic, config $config, data $data){ $size = func_num_args(); for($i = 0; $i < $size; $i++){ $arg = func_get_arg($i); //self::$defaults[$name] = $arg; } } Problēma ir tāda, ka man ir nepieciešams dabūt funkcijas argumenta nosaukumu. func_get_arg($i) atgriež pašu argumentu, bet man vajadzētu mainīgā nosaukumu (dic, config, utt.) Vai ir iespēja ko tādu izdarīt? Quote Link to comment Share on other sites More sharing options...
rATRIJS Posted April 29, 2010 Report Share Posted April 29, 2010 Reflection to spēj, bet es neteiktu, ka tā ir laba doma... http://grab.by/463u -> http://grab.by/463A Quote Link to comment Share on other sites More sharing options...
Jackal Posted April 29, 2010 Author Report Share Posted April 29, 2010 Kādēļ tā nav laba doma? Quote Link to comment Share on other sites More sharing options...
Kaklz Posted April 30, 2010 Report Share Posted April 30, 2010 Varbūt izstāsti, kam tev tas ir nepieciešams, ko tu centies panākt gala rezultātā? Ja tev ir definēti funkcijas argumenti, tad tev nav nepieciešams lietot func_get_args(), jo vari pa taisno vērsties pie attiecīgajiem mainīgajiem. Ja tev nav definēti funkcijas argumenti, tad arī mainīgajiem nav nosaukumu, tikai indeksi. Quote Link to comment Share on other sites More sharing options...
rATRIJS Posted April 30, 2010 Report Share Posted April 30, 2010 Es pieljauju, ka vinjsh vienkaarshi veelas atvieglotu argumentu sabaazshanu masiivaa, piemeeram, ja padoti ir argumenti: function t($arg_1, $arg_2); tad rezultaataa vinjsh grib masiivu: array( 'arg_1' => 'some value', 'arg_2' => 'some_value' ); Es gan teiktu, ka to ar rocinjaam var izdariit - 3 argumenti, jau nav daudz... Quote Link to comment Share on other sites More sharing options...
Jackal Posted April 30, 2010 Author Report Share Posted April 30, 2010 (edited) Šo lietu taisu, lai klasēs būtu pieejami globālie objekti. Pašlaik meklēju labāko variantu kā varētu nodrošināt globālos objektus visā aplikācijā. Esmu sapratis, ka singleton objekti nav labi, jo, ja vajadzīgas vairākas objekta instances (piemēram, vairākas db konekcijas), tad singletons nekam neder. Pēc tam uzgāju singleton registry. It kā registry patterns būtu tas, kas vajadzīgs, bet sanāk baigi gari rakstīt. Piemēram, ja vajadzīga db objekta metode, tad jāraksta $this->registry->db->vajadzīgā metode. Manuprāt, tas ir drusku pa garu, ideāli būtu $this->db->vajadzīgā metode. Un tagad esmu nonācis līdz dependency injection container (sīkāk varat palasīt šeit - http://r.je/wrong.html ). Dēļ kā arī gribēju automatizēt funkcijas argumentu saņemšanu. Ilgāk papētot dependency injection container liekas, ka tas ir vēl sliktāks par iepriekšējiem diviem. Varbūt kādam ir citas idejas, protams, izņemot global? Edited April 30, 2010 by Jackal Quote Link to comment Share on other sites More sharing options...
codez Posted April 30, 2010 Report Share Posted April 30, 2010 (edited) Es daru tā, ka klases automātiski lādē __autoload, ar 1 burta prefixu atdalu library, controler, model, ... - L, C, M, ... un tad, ja vaajg izsaukt globālu funkciju: LManaKlase::manaFunkcija(); ja vajag piekļūt instancei, tad izmantoju parastu singleton paternu LManaKlase::i()->$dati; ja vajag vairākas instance, tad var darīt tā, ka kā parametru norāda instance nosaukumu. LManaKlase::i('instance1')->$dati; vai LManaKlase::i(0)->$dati; LManaKlase::i(1)->$dati; vai, ja katrai instancei ir nepieciešama savādāka inicializācija, tad veido vairākas statiskas funkcijas, kurās ir katrai instancei specifiskā inicializācija. LManaKlase::i1()->$dati; LManaKlase::i2()->$dati; Edited April 30, 2010 by codez Quote Link to comment Share on other sites More sharing options...
xPtv45z Posted April 30, 2010 Report Share Posted April 30, 2010 Vari mēģināt izmantot to pašu singleton registry un __get() - http://lv.php.net/manual/en/language.oop5.overloading.php#language.oop5.overloading.members Uztaisīt, ka izsaucot $this->db, tiek pārbaudīts vai iekš registry ir tāds objekts, un tad vai atgriezt to, vai pašu klases parametru, ja nav. 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.