Jump to content
php.lv forumi

Ieteikums "visu darošo" f-ju rakstīšanā


jb4

Recommended Posts

Mēs esam sarakstījuši funkciju bibliotēkas. Bibliotēkās ir funkcijas, kurām padod atsevišķus gaidītus parametrus un tad viņas apstrādā tos parametrus un izdara gaidītās lietas. Viss ir jauki, bet vienu dienu mēs gribam, lai šī funkcija ņem vērā tūkstoš citu lietu, kuras līdz šim neesam padevuši kā parametrus. Rakstīt jaunu funkcijas versiju, kur paredzēt jaunos parametrus? Tas, ka var iekļaut f-jā neparedzētu parametru apstrādi, nav gluds risinājums. Un tā katru dienu jaunu funkciju?

 

Šīs problēmas risināšanai pēdējā laikā izmantoju šādu metodi: uzrakstu jaunu f-jas versiju ar diviem parametriem - $input un $handler, kur $input ir viss tradicionālais ievads un $handler ir nosaukums f-jai, kura interpretēs $input ņemot vērā visu iespējamo nevis tikai tos dažus parametrus, kurus padevām vecajai f-jas versijai.

 

Tālāk piemērs kodā f-jai, kas no asociatīva masīva, kas veidots formā [value]=>label uzģenerē HTML formā noderīgu <option> elementu sarakstu:

 

<?php

// Tipiskas f-jas
function optionsList($options,$value) {
foreach ( $options as $optValue=>$optLabel ) {
	?>
	<option value="<?=$optValue?>"<?=($optValue==$value)?' selected="selected"':''?>><?=$optLabel?></option>
	<?php
}
}

// F-jas, kādas iesaku rakstīt
function optionsList2($options,$value,$optionsHandler=null) {
if ( is_null($optionsHandler) ) {
	foreach ( $options as $optValue=>$optLabel ) {
		?>
		<option value="<?=$optValue?>"<?=($optValue==$value)?' selected="selected"':''?>><?=$optLabel?></option>
		<?php
	}
} else {
	foreach ( $options as $option ) {
		list($optValue,$optLabel) = call_user_func($optionsHandler,$options);
		?>
		<option value="<?=$optValue?>"<?=($optValue==$value)?' selected="selected"':''?>><?=$optLabel?></option>
		<?php
	}
}
}

?>

 

Apdarinātāji (handlers) ir foršā padarīšana. Tā man izdodas saglabāt loģikas nodalījumu no vizualizēšanas. Lai kāds būtu izvads, šādām funkcijām padodu jēlus, neapstrādātus datus, jo tur, no kurienes, es viņas izsaucu, man nav laika speciāli taisīt tieši konkrētai vietai noformētus datus. Ja kādai vietai vajag speciāli noformētus datus, tad tos noformēsim caur apdarinātāju.

 

Cerams, ka noder arī jums.

Link to comment
Share on other sites

saprotu ka dropdowns ir kā labs piemērs, bet vai nesanāk tā ka tā daļa kas, universālajā f-jā būtu jābūt visiem kopīga ir tikai nosaukums, atverošā un aizverošā figuriekava, bet pārējais viss iet handlerī?

 

ja gribetu php izplūst ar universālām f-jām, tad es taisītu kaut vai 10mit īsas f-jas un tad tās kombinētu kopā vienu iekš otras, idejiski kaut kas mazdrusciņ līdzīgi kā funkcionālajā programēšanā.

Edited by v3rb0
Link to comment
Share on other sites

hmm manupraat pastuulbi :(

kaapeec viss jaserezgjii?

LAi Skripts leenaak straadaatu + buutu gruutaak lasaams?

Katrai probleemai savu f-ju un viss...

Man pa siem gadiem sakraajusies neliela bibli. kur kaadas 20-30 daudzmaz unversaalas f-jas...

taas kombineejot varu dabuut gandriiz visu man vajadziigo....

Link to comment
Share on other sites

neredzu jēgu tam visam, ju nu vienīgi jo sarezgītāk, jo labāk.

 

tad labāk tiešām uztaisi klasi, vai kā savadāk sabāz funkcijas vienā failā ( tās kuras tev ceļo no viena projekta uz otru) un visas problēmas būs atrisinātas. bet šādi rādīt listbox nu ir pa traku.

Link to comment
Share on other sites

Varbūt šis ir tāds paslikts piemērs, bet doma ir akceptējama. Labāks piemērs būtu php funkcija usort(), kurai arī var definēt tādu kā handler-i, šajā gadījumā salīdzinošo funkciju, kura pasaka, kurš no diviem elementiem ir lielāks, bet visus elementus sakārto pati.

Link to comment
Share on other sites

×
×
  • Create New...