Jump to content
php.lv forumi

Atgriežamā vērtība


john.brown

Recommended Posts

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

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

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

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

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

×
×
  • Create New...