_PUIKA_ Posted June 6, 2011 Report Share Posted June 6, 2011 (edited) 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 June 6, 2011 by _PUIKA_ Link to comment Share on other sites More sharing options...
briedis Posted June 6, 2011 Report Share Posted June 6, 2011 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 More sharing options...
_PUIKA_ Posted June 6, 2011 Author Report Share Posted June 6, 2011 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 More sharing options...
briedis Posted June 6, 2011 Report Share Posted June 6, 2011 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 More sharing options...
daGrevis Posted June 6, 2011 Report Share Posted June 6, 2011 Kā var nebūt nozīme? x( a, b, c ) ...un... x ( b, c, a ) Sanāks pilnīgi "unexpected" rezultāts! Link to comment Share on other sites More sharing options...
briedis Posted June 6, 2011 Report Share Posted June 6, 2011 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 More sharing options...
rpr Posted June 7, 2011 Report Share Posted June 7, 2011 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 More sharing options...
_PUIKA_ Posted June 7, 2011 Author Report Share Posted June 7, 2011 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 More sharing options...
Recommended Posts