Shuiteáil mé PHP 5.2 ag ceann de mo ríomhairí tástála lá atá inniu ann agus cúpla píosaí de chód gur oibrigh roimhe breá leagan 5.1.6 Chaith earráidí marfacha sa leagan nua. Bhí an teachtaireacht earráide "leibhéal Neadú - ródhomhain recursive spleáchas?"Agus thóg sé mórán ama
I PHP tá dhá oibreoirí i gcomparáid, === == Agus. Níl sé ar a dtugtar an chéad go docht go ginearálta gur mar gheall ar chineál ach an dara. Mar sin,, mar shampla
macalla ( bréagach == 0 ); // fíor
macalla ( bréagach === 0 ); // bréagach
- 0 Is é tslánuimhir agus bréagach a Boole
Mo fhadhb a d'éirigh as úsáid a bhaint as a chlóscríobh neamh-dian leis na rudaí.
$a = nua MyObj();
$b = nua MyObj();
más rud é go( $ar == $ b )
…
Níor mheas mé go raibh an méid a bhí mé ag déanamh leis an gcód seo. Nuair a bheidh i gcomparáid dhá rudaí ag baint úsáide as an t-oibreoir i gcomparáid neamh-dian (==) PHP i gcomparáid go léir airíonna na rudaí agus má tá siad comhoiriúnach le na rudaí a meastar a bheith comhionann. Más rud é nach ndéanann siad comhoiriúnach nach bhfuil siad comhionann. I bhfeidhm, againn i gcomparáid recursive de na hairíonna de gach rud, agus gach a n-airíonna, srl. go dtí go sroicheann muid cineálacha sonraí bunúsacha mar teaghráin agus integers.
Má, áfach,, úsáidimid gcomparáid dian (===), Beidh PHP seiceáil cibé an bhfuil an dá rudaí go díreach an rud céanna a, Ní rudaí díreach leis na hairíonna céanna.
MyObj rang
{
p $ poiblí;
}$a = nua MyObj();
$b = nua MyObj();
$c = nua MyObj();
$ar->p; 1;
$b->p; 1;
$c->p; 2;
macalla ( $ar == $ c ); // bréagach
macalla ( $ar == $ b ); // fíor
macalla ( $ar === $ b ); // bréagach
Eascraíonn an fhadhb má tá tú tagairtí ciorclán i do rudaí a bhfuil airíonna. Mar sin,, mar shampla
MyObj rang
{
p $ poiblí;
}
OtherObj rang
{
poiblí $ q;
}$a = nua MyObj();
$b = nua OtherObj();
$ar->p = $ b;
$b->q = $ a; // an tagairt ciorclán: $ar->p->=== Q $ a$c = nua MyObj();
$d = nua OtherObj();
$c->p = $ d;
$d->q = $ c;// tagartha eile ciorclach: $c->p->q $ c ===macalla ( $ar == $ c ); // Earráid mharfach:
Neadú leibhéal ródhomhain – spleáchais athchúrsach?
D'fhonn a chur i gcomparáid le go $ c $, Ní mór PHP comparáid a n-airíonna. Mar sin, téann an loighic in PHP rud éigin mar seo: $ina c == $ más rud é $ a->p == $c->p más rud é $ a->p->q == $ c->p->q más rud ép == $ c-;p->q->pp-= $c->p->q->p etc. feadh tréimhse éiginnte.
PHP 5.1 an chuma ar an bhfadhb ar bhealach rianúil (is dócha tar éis leibhéal áirithe de recursion ar ais í go simplí bréagach) – agus d'oibrigh sPHPmach fíneáil de ghnáth. PHP 5.2 is ceart aird ar an earráid marfach thuas.
Nuair a fhios agat an fhadhb, Is é an réiteach éasca – úsáid i gcomparáid dian.
macalla ( $ar === $ c ); // bréagach (agus gan earráid)
Beidh an chomparáid dian ach seiceáil cibé an bhfuil an dá rudaí ag an suíomh céanna i gcuimhne, agus ní mar sin fiú breathnú ar na luachanna na maoine.
NB. Is féidir an fhadhb chéanna chun cinn agus iad ag úsáid na n-oibreoirí i gcomparáid deireadh leis (a úsáid !== In ionad !;) agus nuair a úsáid in_array (in_array úsáid ar tháb comparáid a chur in iúl go docht).
