Jump to content
php.lv forumi

Problēma ar funkcijas argumentiem


_PUIKA_

Recommended Posts

Labdien.

Man te sekojoša problēma:

Izveidoju funkciju query() .. iekš šīs funkcijas ir 4 argumenti (t.i. $nosaukums, $query, $tips, $vertiba).

Kā redzat man ir argumenti, kurus pie dažiem tipiem reāli nevajag izmantot, jo funkcijas kods ir sekojošs:



function query( $name, $query, $type = NULL, $value ){
		$this->query	=	mysql_query($query);
		if( $this->name = 'array' ){
			while( $this->$result = mysql_fetch_array($this->query, $this->type) ){
				return $this->$result[$this->$value];
			}
		}elseif( $this->name = 'assoc' ){
			while( $this->$result = mysql_fetch_assoc($this->query) ){
				return $this->$result[$this->value];
			}
		}elseif( $this->name = 'object' ){
			while( $this->result = mysql_fetch_object($this->query) ){
				return $this->result->$this->value;
			}
		}elseif( $this->name = 'row' ){
			$this->result = mysql_fetch_row($this->query);
			return $this->result[$this->value];
		}else{
			return FALSE;
		}
	}

 

 

Tātad problēma.. kā es varu izsaukt funkciju no klases, ja $name($nosaukums) ir 'row', un funkcija vēl pieprasa ievadīt tikai $query un $value argumentus, nevis visus 4 iekļaujot $type??

Liels paldies jau iepriekš.

Edited by _PUIKA_
Link to comment
Share on other sites

O, šitais ir viens no top WORST practices, kad neobligātus parametrus liek PIRMS obligātajiem.

 

 

Pilnīgi stulbi:

function query( $name, $query, $type = NULL, $value ){

Ir ok:

function query( $name, $query, $value, $type = NULL){

Link to comment
Share on other sites

O, šitais ir viens no top WORST practices, kad neobligātus parametrus liek PIRMS obligātajiem.

 

 

Pilnīgi stulbi:

function query( $name, $query, $type = NULL, $value ){

Ir ok:

function query( $name, $query, $value, $type = NULL){

 

Tatād sanāk, ka tam ir nozīme, kur es viņu lieku. Ok. Bet kāds ir atrisinājums, lai vienmēr nebūtu oblīgāti jādefinē $type, bet kad ir izsaukts tips, kuram obligāti viņu, vajag, funkcija pieprasa $type ievadi?

Link to comment
Share on other sites

Tatād sanāk, ka tam ir nozīme, kur es viņu lieku. Ok. Bet kāds ir atrisinājums, lai vienmēr nebūtu oblīgāti jādefinē $type, bet kad ir izsaukts tips, kuram obligāti viņu, vajag, funkcija pieprasa $type ievadi?

 

Nu to tu vari pats pārbaudīt funkcijā.

 

Teiksim,

 

function foo($a, $b = NULL){
 if($a == 1 && $b === NULL){
   throw new Exception("Ja $a ir 1, tad $b ir obligāti jānorāda!");
 }
 //Kods tālāk, ja viss ir ok
}

Link to comment
Share on other sites

Kā var nebūt nozīme?

 

x( a, b, c )

 

...un...

 

x ( b, c, a )

 

Sanāks pilnīgi "unexpected" rezultāts!

 

Nē, bija bazars par to, ka ir stulbi darīt šitā:

function x($a="blabla", $b, $c = 123){}

Link to comment
Share on other sites

teorētiski var izmantot arī func_get_args(), tad padod kādus parametrus gribi, bet nu labāk jau būtu, ja tev tā funkcija ir kaut kādā klasē, tad izveido vairākas funkcijas ar konkrētiem parametriem un tad no tām funkcijām tiek izsaukta galvenā funkcija ar visiem parametriem.

 

iespējams neskaidri izteicos, bet es arī īpaši necentos :)

Link to comment
Share on other sites

Tiešām liels paldies.

Muļķīgs ir peiņēmums, par tukšu argumentu.. t.i. ka viņam var skriet pāri un pieprasīt nākošo. Atrisinājums.. visu neobligāto likt beigās!

Starpcitu.. nu pat jau sāku domāt, ka te derētu izveidot cepumu sistēmu.. tieši tiem, kas tādiem kā man ir izpalīdzējuši saprast koda būtību. :)

Vēlreiz paldies! Problem solved!

Link to comment
Share on other sites

Guest
This topic is now closed to further replies.
×
×
  • Create New...