Primerjava nizov z uporabo == proti strcmp

Zdi se, da je operator === v PHP občutljiv na velike in male črke? Ali je torej kakšen razlog za uporabo strcmp()? Ali je varno narediti nekaj takega:

if ( $password === $password2 ) { ... }
Rešitev

Razlog za njegovo uporabo je, da strcmp

vrne < 0, če je str1 manjši od str2; > 0, če je str1 večji od str2, in 0, če sta enaka.

=== vrne le true ali false, ne pove pa, kateri niz je "večji".

Komentarji (9)

Uporaba == je lahko nevarna.

Upoštevajte, da bi spremenljivko spremenila v drug podatkovni tip, če bi se ta dva razlikovala.

Primeri:

  • (1 == '1') ? 'true' : 'false';`
  • echo (1 == true) ? 'true' : 'false';

Kot lahko vidite, sta ta dva tipa različna, vendar je rezultat true, kar morda ni tisto, kar bo vaša koda pričakovala.

Uporaba === je vseeno priporočljiva, saj je test pokazal, da je nekoliko hitrejša od strcmp() in njegove alternative strcasecmp(), ki ne upošteva velikosti črk.

Hitro googlanje pokaže tole primerjavo hitrosti: http://snipplr.com/view/758/

Komentarji (2)

Uporabite lahko strcmp(), če želite razvrstiti ali primerjati nize leksikografsko. Če želite samo preveriti enakost, je == povsem v redu.

Komentarji (5)