来简书、看世界

来看一个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;

}

}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容