免费注册 查看新帖 |

Chinaunix

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

[问题]Smarty中register_function()的问题:&$smarty有什么含意? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-10-13 16:00 |只看该作者 |倒序浏览
同样是手册里的一个例子,如下:

Example 13-1. register_function()

<?php
$smarty->register_function('date_now', 'print_current_date');

function print_current_date($params, &$smarty)
{
  if(empty($params['format'])) {
    $format = "%b %e, %Y";
  } else {
    $format = $params['format'];
  }
  return strftime($format,time());
}
?>  

And in the template

{date_now}

{* or to format differently *}
{date_now format="%Y/%m/%d"}


首先,&$smarty是什么含意?在变量前面为什么加&?
另外,function print_current_date($params, &$smarty)中的&$smarty参数怎么在函数定义中没用到啊?

论坛徽章:
0
2 [报告]
发表于 2006-10-14 12:06 |只看该作者
引用,同一个页面请求内使用同一个变量源值,意图是减少变量的复制(优化手段)。

论坛徽章:
0
3 [报告]
发表于 2006-10-16 19:17 |只看该作者

To: crazysoul

谢谢指点!我查了php手册关于引用这部分的内容,但是还是对它的概念不太理解。
比如,其中说:“
PHP 的引用允许你用两个变量来指向同一个内容。意思是,当你这样做时:
<?php
$a =& $b
?>
这意味着 $a 和 $b 指向了同一个变量。
注: $a 和 $b 在这里是完全相同的,这并不是 $a 指向了 $b 或者相反,而是 $a 和 $b 指向了同一个地方。”

于是我把上面这个例子的代码作了如下修改:
<?php
$a=7;

$a =& $b;

echo $b;
?>

自己想象应该输出“7”,但结果什么都没有,我不理解,情节是一下吧

论坛徽章:
0
4 [报告]
发表于 2006-10-16 20:28 |只看该作者
<?php
$a=7;

$b =& $a;

echo $b;
?>

论坛徽章:
0
5 [报告]
发表于 2006-10-16 23:17 |只看该作者
学过C么..理解为指针吧

论坛徽章:
0
6 [报告]
发表于 2006-10-17 09:01 |只看该作者
!、&$smarty用于传递smarty的实例。既然函数被注册为smarty的方法,那么函数中就可能需要使用smarty的其他方法和属性。通过$smarty就可以访问到当前smarty实例
2、&$smarty中的&表示传引用,如果只是传值的话,函数中对smarty实例属性的任何改变都将无效
3、这个&$smarty是php4的写法,php5由于对象总是以引用方式传递,可以写做$smarty
4、$a =& $b;表示$a和$b指向同一个地方,由于在之前$b并没有赋值,所以$a也就没有值了。对于这点的理解只需理解$a = $b;

论坛徽章:
0
7 [报告]
发表于 2006-10-17 21:14 |只看该作者

To: xuzuning

谢谢,讲得很具体。不过我基础差,得好好捉摸一下~~还有个问题如下:

php手册里“引用”这部分的“引用传递”小节里有关于“从函数中返回的引用”这个例子:

<?php
function &bar()
{
    $a = 5;
    return $a;
}
foo(bar());
?>

没看出来这个例子要说明什么问题,给解释一下吧

论坛徽章:
0
8 [报告]
发表于 2006-10-18 10:06 |只看该作者

To: kirkcolors

学过C,但基础差。手册里一直强调引用不同于指针啊

论坛徽章:
0
9 [报告]
发表于 2006-10-18 16:11 |只看该作者
手册上的那个例子不能说明什么问题
解释引用的返回用这个例子较好
  1. function &foo() {
  2.   static $var;
  3.   return $var;
  4. }

  5. $a =& foo();
  6. $a++;
  7. echo foo();
复制代码


在C中,指针指向了内存中真实的物理地址,通过指针的运算,可以从一个地址出发访问整个内存
php的变量都以stdClass对象形式存放在一个表中,引用使得两个以上变量指向同一个表项。我们也不可能从一个变量出发去访问另一个变量

这就是“引用不同于指针”的关键所在
撇开这点以后,引用的表现与指针还是很相似的

论坛徽章:
0
10 [报告]
发表于 2006-10-20 19:43 |只看该作者

To: xuzuning

实在不好意思,你举的这个例子我还是不明白为什么运行结果是1。
function &foo()   这里比普通函数声明多了一个&,这是什么意思?为什么把&去掉,输出结果就为空了?
能否把你举的这个例子每句都注释以下解释,我的基本概念还没有在头脑中形成。

多谢了!!

[ 本帖最后由 cjcameron 于 2006-10-20 20:32 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP