来简书、看世界

2016-04-18  本文已影响0人  司马老景

来看一个php函数的源码。 strpos 在字符串中找到指定字符串第一次出现的位置。

PHP_FUNCTION(strpos)

{

zval *needle;

char *haystack;

char *found = NULL;

char  needle_char[2];

long  offset = 0;

int  haystack_len;

if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "sz|l", &haystack, &haystack_len, &needle, &offset) == FAILURE) {

return;

}

if (offset < 0 || offset > haystack_len) {

php_error_docref(NULL TSRMLS_CC, E_WARNING, "Offset not contained in string");

RETURN_FALSE;

}

if (Z_TYPE_P(needle) == IS_STRING) {

if (!Z_STRLEN_P(needle)) {

php_error_docref(NULL TSRMLS_CC, E_WARNING, "Empty needle");

RETURN_FALSE;

}

found = php_memnstr(haystack + offset,

Z_STRVAL_P(needle),

Z_STRLEN_P(needle),

haystack + haystack_len);

} else {

if (php_needle_char(needle, needle_char TSRMLS_CC) != SUCCESS) {

RETURN_FALSE;

}

needle_char[1] = 0;

found = php_memnstr(haystack + offset,

needle_char,

1,

haystack + haystack_len);

}

if (found) {

RETURN_LONG(found - haystack);

} else {

RETURN_FALSE;

}

}

上一篇 下一篇

猜你喜欢

热点阅读