当前位置: 网学 > 编程文档 > PHP > 正文

php函数之子字符串替换 str_replace

来源:Http://myeducs.cn 联系QQ:点击这里给我发消息 作者: 用户投稿 来源: 网络 发布时间: 13/06/21

【编者按】:网学网PHP为您提供php函数之子字符串替换 str_replace参考,解决您在php函数之子字符串替换 str_replace学习中工作中的难题,参考学习

str_replace 子字符串替换 [str_replace]
mixed str_replace ( mixed $search , mixed $replace , mixed $subject [, int &$count ] )
php函数str_replace: 返回一个字符串或者数组。该字符串或数组是将 subject 中全部的 search 都被 replace 替换之后的结果。

现在我们所能知道的一些这个函数的用法,如:str_replace("#", "-", "dizaz#7#final"),str_replace(array(''#'', ''

  • 下一篇资讯: PHP 事件机制(2)
  • 网学推荐

    免费论文

    原创论文

    浏览:
    设为首页 | 加入收藏 | 论文首页 | 论文专题 | 设计下载 | 网学软件 | 论文模板 | 论文资源 | 程序设计 | 关于网学 | 站内搜索 | 网学留言 | 友情链接 | 资料中心
    版权所有 QQ:3710167 邮箱:3710167@qq.com 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
    Copyright 2008-2015 myeducs.Cn www.myeducs.Cn All Rights Reserved
    湘ICP备09003080号
    '), "-", "dizaz#7$final") 等,就这些调用方式,php内部是如何实现的呢,鉴于[深入理解PHP内核],在这里小做分析。

    测试代码:
    复制代码 代码如下:
    <?php
    $object = "dizaz#7#final";
    $res = str_replace("#", "-", $object);
    echo $res;


    如上,先从字符“#”替换为字符“-”开始。

    预备工作:

    下载PHP源代码,http://www.php.net下载即可
    打造自己的阅读代码的工具[本人使用VIM+CSCOPE] 另:Linux用户也推荐图形化查看源代码工具kscope [google之]
    编译工具[gcc],调试工具[gdb],另:GDB图形化端口DDD也很不错,推荐
    编译PHP源码,记得使用--enable-debug [当然也希望通过./configure --help 看看PHP提供的一些编译选项,会有很多收获的]
    开始分析:

    通过[深入理解PHP内核]阅读,我们不难发现其PHP提供标准函数所在目录为PHP-SOURCE-DIR/ext/standard目录下,由于是字符串函数,很容易我们就可以在此目录下找到str_replace函数实现的文件 string.c,接下来就围绕着这个文件进行分析。[当然用CScope很容易就可以锁定,用:cs find s str_replace]

    查询得知其定义实现:
    复制代码 代码如下:
    /* {{{ proto mixed str_replace(mixed search, mixed replace, mixed subject [, int &replace_count])
    Replaces all occurrences of search in haystack with replace */
    PHP_FUNCTION(str_replace)
    {
    php_str_replace_common(INTERNAL_FUNCTION_PARAM_PASSTHRU, 1);

    }
    /* }}} */

    现在需要查看函数php_str_replace_common函数
    复制代码 代码如下:
    /* {{{ php_str_replace_common
    */
    static void php_str_replace_common(INTERNAL_FUNCTION_PARAMETERS, int case_sensitivity)
    {
    /**
    * TODO
    * typedef struct _zval_struct zval;
    * typedef struct _zend_class_entry zend_class_entry
    *
    * struct _zval_struct {
    * zvalue_value value;
    * zend_uint refcount__gc;
    * zend_uchar type;
    * zend_uchar is_ref__gc;
    * };
    *
    * typedef union _zvalue_value {
    * long lval;
    * double dval;
    * struct {
    * char *val;
    * int len;
    * } str;
    * HashTable *ht;
    * zend_object_value obj;
    * } zvalue_value;
    *
    * typedef struct _zend_object {
    * zend_class_entry *ce;
    * HashTable *properties;
    * HashTable *guards;
    * } zend_object;
    *
    */
    zval **subject, **search, **replace, **subject_entry, **zcount = NULL;
    zval *result;
    char *string_key;
    uint string_key_len;
    ulong num_key;
    int count = 0;
    int argc = ZEND_NUM_ARGS();
    if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ZZZ|Z", &search, &replace, &subject, &zcount) == FAILURE) {
    return;
    }
    SEPARATE_ZVAL(search);
    SEPARATE_ZVAL(replace);
    SEPARATE_ZVAL(subject);
    /* Make sure we''re dealing with strings and do the replacement. */
    if (Z_TYPE_PP(search) != IS_ARRAY) {
    ....//代码省滤
    } else { /* if subject is not an array */
    php_str_replace_in_subject(*search, *replace, subject, return_value, case_sensitivity, (argc > 3) ? &count : NULL);
    }
    if (argc > 3) {
    zval_dtor(*zcount);
    ZVAL_LONG(*zcount, count);
    }
    }
    /* }}} */

    继续跟踪php_st

    123下一页
    点击进入论坛和大家一起交流设计,分享设计素材,结交设计朋友
  • 上一篇资讯: php expects parameter 1 to be resource, array given 错误
  • 下一篇资讯: PHP 事件机制(2)
  • 相关资讯

    网学推荐

    免费论文

    原创论文

    文章排行榜

    浏览:
    设为首页 | 加入收藏 | 论文首页 | 论文专题 | 设计下载 | 网学软件 | 论文模板 | 论文资源 | 程序设计 | 关于网学 | 站内搜索 | 网学留言 | 友情链接 | 资料中心
    版权所有 QQ:3710167 邮箱:3710167@qq.com 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
    Copyright 2008-2015 myeducs.Cn www.myeducs.Cn All Rights Reserved
    湘ICP备09003080号