2010-03-07 8 views
19
if(strpos("http://www.example.com","http://www.")==0){ // do work} 

Espero que esto se resuelva como cierto, y lo hace. ¿Pero qué sucede cuando hagophp 5 strpos() ¿diferencia entre devolver 0 y falsa?

if(strpos("abcdefghijklmnop","http://www.")==0){// do work} 

Esto también pasa en PHP 5 porque por lo que yo puedo trabajar en los strpos devuelve false que se traduce como 0.

Es esto correcto pensamiento/conducta? Si es así, ¿cuál es la solución para la prueba de que una subcadena se encuentre al comienzo de otra cadena?

Respuesta

39

Sí, esto es correcto/comportamiento esperado:

  • strpos puede regresar 0 cuando hay un partido en el inicio de la cadena
  • y devolverá false cuando no coincida

La cosa es que no se debe utilizar para comparar ==0 y false; usted debe utilizar ===, así:

if(strpos("abcdefghijklmnop","http://www.") === 0) { 

} 

O:

if(strpos("abcdefghijklmnop","http://www.") === false) { 

} 


Para más información, ver Comparison Operators:

  • $a == $b habrá TRUE si $a es igual a $b.
  • $a === $b habrá TRUE si $a es igual a $b, y que son del mismo tipo.

Y, citando the manual page of strpos:

Esta función puede devolver booleana FALSE, pero también puede devolver un valor no-booleano que será evaluado FALSE, como 0 o "".
Por favor, lea la sección en Booleans para más información.
Utilice the === operator para probar el valor de retorno de esta función.

9

=== y !== comparar tipo y valor:

if (strpos("abcdefghijklmnop", "http://www.") !== false){// do work} 
4

strpos devuelve un int o booleano falso. el operador == también evalúa 0 para significar falso, desea usar el operador === (tres signos iguales) que también verifica que los tipos que se comparan son los mismos en lugar de simplemente ver si se puede evaluar que significan lo mismo.

por lo

if (strpos($hastack, $needle) === 0) 
{ 
    // the $needle is found at position 0 in the $haystack 
} 
1

0 es un posible valor de retorno de strpos cuando se encuentra una coincidencia en el comienzo mismo. En caso de que no se encuentre la coincidencia, devuelve false (booleano). Por lo tanto, debe verificar el valor de retorno de strpos utilizando el operador === que verifica el valor y el tipo en lugar de usar == que solo comprueba el valor.

0

personalmente tienden a usar de esta manera:

if(!strpos($v,'ttp:'))$v='http://'.$v; 

o

if(strpos(' '.$v,'http')) 

evitar la posición "0", entonces siempre que sea un número más de 0 aplausos

+1

Si su el código utiliza formas no estándar en la notación no estándar para corregir problemas estándar que toda la capacidad de mantenimiento ha dejado el edificio. Todos los desarrolladores de PHP decentes conocen y esperan la notación '==='; su respuesta solo presenta un rendimiento obsoleto y un asesino de legibilidad. –

Cuestiones relacionadas