免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3407 | 回复: 6
打印 上一主题 下一主题

[函数 参数 返回] 关于PHP中的引用传值或返回值总结(英文) [复制链接]

longnetpro 该用户已被删除
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2003-12-17 06:58 |只看该作者 |倒序浏览
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
2 [报告]
发表于 2003-12-17 09:48 |只看该作者

关于PHP中的引用传值或返回值总结(英文)

老兄你经常都发一些要我慢慢看的东西,呵呵,我先收,等闲了来拜读

论坛徽章:
0
3 [报告]
发表于 2003-12-17 11:42 |只看该作者

关于PHP中的引用传值或返回值总结(英文)

呼,好累~~~~没读代码~~~只看了前面的部分~~~
恩,如果能和C++做一个比较就好了~~~~

还有一点我不是很明白~~
$t="123";

funciton &test($t1)
{
   $t2 = $t1
   return $t2;
}

$t3 =& test($t);

$t, $t1 ,$t2 内存都将在什么时候释放~~

论坛徽章:
0
4 [报告]
发表于 2003-12-17 14:56 |只看该作者

关于PHP中的引用传值或返回值总结(英文)

首先,ZEND 里面定义的两个函数
ZEND_API void start_memory_manager(TSRMLS_D);
ZEND_API void shutdown_memory_manager(int silent, int clean_cache TSRMLS_DC);



PHP5.0b2

在源代码 的 main.c 里面的 php_request_shutdown_for_exec 函数里有
1190 行 开始:

  1. void php_request_shutdown(void *dummy)
  2. {
  3.         TSRMLS_FETCH();

  4.         /* EG(opline_ptr) points into nirvana and therefore cannot be safely accessed
  5.          * inside zend_executor callback functions.
  6.          */
  7.         EG(opline_ptr) = NULL;

  8.         zend_try {
  9.                 zend_exec_finished(TSRMLS_C);
  10.         } zend_end_try();

  11.         zend_try {
  12.                 php_end_ob_buffers((zend_bool)(SG(request_info).headers_only?0:1) TSRMLS_CC);
  13.         } zend_end_try();

  14.         zend_try {
  15.                 sapi_send_headers(TSRMLS_C);
  16.         } zend_end_try();

  17.         if (PG(modules_activated)) zend_try {
  18.                 php_call_shutdown_functions();
  19.         } zend_end_try();
  20.        
  21.         if (PG(modules_activated)) {
  22.                 zend_deactivate_modules(TSRMLS_C);
  23.         }

  24.         zend_try {
  25.                 int i;

  26.                 for (i=0; i<NUM_TRACK_VARS; i++) {
  27.                         if (PG(http_globals)[i]) {
  28.                                 zval_ptr_dtor(&PG(http_globals)[i]);
  29.                         }
  30.                 }
  31.         } zend_end_try();

  32.                
  33.         zend_deactivate(TSRMLS_C);

  34.         zend_try {
  35.                 sapi_deactivate(TSRMLS_C);
  36.         } zend_end_try();

  37.         zend_try {
  38.                 shutdown_memory_manager(CG(unclean_shutdown), 0 TSRMLS_CC);
  39.         } zend_end_try();

  40.         zend_try {
  41.                 zend_unset_timeout(TSRMLS_C);
  42.         } zend_end_try();

  43. #ifdef PHP_WIN32
  44.         CoUninitialize();
  45. #endif
  46. }
  47. /* }}} */

复制代码



shutdown_memory_manager();

同样 其他方式 结束的时候 也会

调用 shutdown_memory_manager();

也就是说释放是在 php 程序执行完毕,返回结果之后就释放了

论坛徽章:
0
5 [报告]
发表于 2006-06-12 13:10 |只看该作者
几年之后,回头再读,却也豁然~~呵呵~~

论坛徽章:
0
6 [报告]
发表于 2006-06-12 17:58 |只看该作者
翻译一下最好

论坛徽章:
0
7 [报告]
发表于 2006-06-12 21:40 |只看该作者
我还以为lz回来了
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP