首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

深入理解php内核 编写扩展 II:参数、数组和ZVALs

ZEND_NUM_ARGS()告诉Zend引擎要取得的参数的信息,TSRMLS_CC用来确保线程安全,返回值将被检查是SUCCESS还是FAILURE。...) { php_printf("%s", greeting); php_hello_array_walk(element TSRMLS_CC); return ZEND_HASH_APPLY_KEEP...其中不太熟悉的部件大概是TSRMLS_FETCH()。回想第一部分,TSRMLS_*宏是TSRM层的一部分,用于避免各线程的作用域被其他的侵入。...为了在回调php_hello_array_walk()时找回并使用它,你的函数调用TSRMLS_FETCH()从资源池中找到正确的线程。(注意:该方法比直接传参慢很多,所以非必须不要使用。)...其次是到处都出现的TSRMLS_CC,后面跟着关于错误的严重级别,最后是printf()样式的描述错误信息的格式字符串及相关的参数。让你的函数在失败情形下总是提供一些有意义的错误是很重要的。

90330

给PHP开发者讲讲PHP源码-第二部分

现在来看看下面的三行: if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "sz|l", &haystack, &haystack_len, &needle...下一个函数是TSRMLS_CC宏,这是PHP的一种特性。你会发现这个奇怪的宏分散在PHP代码库的很多地方。是线程安全资源管理器(TSRM)的一部分,它保证PHP不会在多线程之间混乱变量。...这对我们来说不是很重要,当你在代码中看到TSRMLS_CC(或者TSRMLS_DC)的时候,忽略它就行。(有一个奇怪的地方你需要注意的是,在"argument"之前没有逗号。...下面有一个例子: php_error_docref(NULL TSRMLS_CC, E_WARNING, "Failed to write %d bytes to %s", Z_STRLEN_PP(tmp...Z_STRLEN_P(needle)) { php_error_docref(NULL TSRMLS_CC, E_WARNING, "Empty delimiter");

91980

扫码

添加站长 进交流群

领取专属 10元无门槛券

手把手带您无忧上云

扫码加入开发者社群

相关资讯

热门标签

活动推荐

    运营活动

    活动名称
    广告关闭
    领券