strcspn puede ser un poco confuso. Regularmente tienen que consultar el manual después de pasar un tiempo sin usarlo porque me strcspn y strspn mezclado porque hacer lo contrario. Aunque tengo una idea para recordar cuál es cuál en este momento y la enfermedad llega a eso más adelante.
strcspn básicamente busca personajes que no están en esa máscara de caracteres. En el manual,
strcspn int (string $ cadena1, string $ cadena2 [, int $ comienzo [, int $ longitud]])
Devuelve la longitud del segmento inicial de cad1 que no contiene ninguno de los personajes de str2.
Si a rastrear a la función en la fuente, se llega a esta donde se puede ver cómo funciona internamente la función. Simplemente camina a través de la cadena en busca de algo que no espera, entonces busca algo que no espera y devuelve la longitud de dicho segmento.
etc / standard / string.c: 1571
PHPAPI size_t php_strcspn(char *s1, char *s2, char *s1_end, char *s2_end)
{
register const char *p, *spanp;
register char c = *s1;
for (p = s1;;) {
spanp = s2;
do {
if (*spanp == c || p == s1_end) {
return p - s1;
}
} while (spanp++ < (s2_end - 1));
c = *++p;
}
/* NOTREACHED */
}
- PHPAPI size_t php_strcspn(char *s1, char *s2, char *s1_end, char *s2_end)
- {
- register const char *p, *spanp;
- register char c = *s1;
-
- for (p = s1;;) {
- spanp = s2;
- do {
- if (*spanp == c || p == s1_end) {
- return p - s1;
- }
- } while (spanp++ < (s2_end - 1));
- c = *++p;
- }
- /* NOTREACHED */
- }
Cualquier devolución strcspn vez que un número distinto de cero, theres su mala disposición en la entrada y que sobrescribir la entrada completa mal con el valor predeterminado. Esto es sólo un simple curso de acción después de encontrar una entrada incorrecta, en realidad, probablemente terminaría en busca de errores posible, comprobar una tabla 301, o algo por el estilo.
Ahora, en cuanto a ese truco para recordar que función hace que he mencionado antes, la enfermedad tienen que pedir prestado un comentario del manual de PHP.
strcspn () también puede considerarse como análoga a la siguiente expresión regular:
<?php
// where ... represents the mask of characters
preg_match('/[^ ...]/', substr($subject, $start, $length) );
?>
- <?php
- // where ... represents the mask of characters
- preg_match('/[^ ...]/', substr($subject, $start, $length) );
- ?>
Si mal no recuerdo strcspn y strspn como clases de personajes a partir de expresiones regulares, sólo tengo que recordar que en una clase de caracteres negada existe ese personaje extra "^" y en el nombre de la función strcspn también hay un personaje extra "c".
-
Realmente no puedo decir mucho sobre is_readable, lo uso en el ejemplo, porque el tono de la conversación parece ser la seguridad y el error-prevension-sabio es is_readable menos propenso a los accidentes que algo como file_exists. Yo prefiero usar file_exists. Im bastante bueno sobre la fabricación de seguro que algo va a funcionar antes de que entre en vigor, mediante el uso de valores por defecto como yo Im no va a obtener un error sobre un archivo ilegible, salvo en una falla catastrauphic, y theres ninguna razón para mi para cambiar los permisos de archivos más adelante.
Strong with this one, the sudo is.