Jump to content
php.lv forumi

Funkcijas argumenta nosaukums


Jackal

Recommended Posts

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?

Link to comment
Share on other sites

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.

Link to comment
Share on other sites

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...

Link to comment
Share on other sites

Š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 by Jackal
Link to comment
Share on other sites

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 by codez
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...