PHP的大括号,详解

2009年6月15日 | 分类: PHP | 标签: ,

本文原创,转载请注明出处,谢谢合作!

今天更新了日志,点Tag:面试,结果出来了一些不相关的东西,感觉很奇怪,把SQL导出,我在本地调了下,发现原来是
SQL语句里的问题。

代码如下
  1. select * from blog_blogs where blog_tags like ‘%{$k}%’ order by blog_id

因为Tags的ID是用大括号分开的,就是{1}{2}这样形式,但是用以上语句查询得不出正确结果,原因就是这个语句最终变成了

代码如下
  1. select * from blog_blogs where blog_tags like ‘%$k%’ order by blog_id

这样的形式,哎 !现在就来说说PHP里大括号的作用吧。
一、不管什么程序,function name(){},  for(){}, ….这太多了,不说也知道什么用了。
二、$str{4}在字符串的变量的后面跟上{}刚大括号和中括号一样都是把某个字符串变量当成数组处理
三、{$val}这种情况就是我遇到的问题,这时候大括号起的作用就是,告诉PHP,括起来的要当成变量处理。看下一个简单的代码

代码如下
  1. <?php
  2. Header(‘content-type:text/html;charset=utf-8′);
  3. $array=array(
  4. 0=>123,
  5. 1=>234,
  6. pig=>‘www.pigblog.net’,
  7. ‘name’=>‘小猪’,
  8. );
  9. foreach($array as $k=>$v){
  10. echo “select * from blog_blogs where blog_tags like ‘%{$array[$k]}%’ order by blog_id”.‘<br>’;
  11. }
  12. ?>
    输出为:
    select * from blog_blogs where blog_tags like ‘%123%’ order by blog_id
    select * from blog_blogs where blog_tags like ‘%234%’ order by blog_id
    select * from blog_blogs where blog_tags like ‘%www.pigblog.net%’ order by blog_id
    select * from blog_blogs where blog_tags like ‘%小猪%’ order by blog_id

从上面就可以看出我的代码出错的原因了。
把上面灰色的换成如下

代码如下
  1. foreach($array as $k=>$v){
  2. echo “select * from blog_blogs where blog_tags like ‘%{{$array[$k]}}%’ order by blog_id”.‘<br>’;
  3. }
    输出为:
    select * from blog_blogs where blog_tags like ‘%{123}%’ order by blog_id
    select * from blog_blogs where blog_tags like ‘%{234}%’ order by blog_id
    select * from blog_blogs where blog_tags like ‘%{www.pigblog.net}%’ order by blog_id
    select * from blog_blogs where blog_tags like ‘%{小猪}%’ order by blog_id

对比一下画线的地方,就是这里改了下,这样就正确了。

那现在自己想一下,本来PHP里如果用 双引号 就会自动识别变量,怎么还搞个大括号?
目前我的经验是:在双引号里,如果用显示的关联数组就会报出语法错误,出错语句如下

代码如下
  1. Header(‘content-type:text/html;charset=utf-8′);
  2. $array=array(
  3. 0=>123,
  4. 1=>234,
  5. ‘pig’=>‘www.pigblog.net’,
  6. ‘name’=>‘小猪’,
  7. );
  8. echo $array['name']“.‘<br>’;
    输出为:
    Parse error: parse error, expecting `T_STRING’ or `T_VARIABLE’ or `T_NUM_STRING’ in D:xc_blog1.php on line 9

但是如果变成这样的代码,就是在双引号里,用大括号就是正常的。

代码如下
  1. Header(‘content-type:text/html;charset=utf-8′);
  2. $array=array(
  3. 0=>123,
  4. 1=>234,
  5. ‘pig’=>‘www.pigblog.net’,
  6. ‘name’=>‘小猪’,
  7. );
  8. echo {$array['name']}.‘<br>’;
    输出为:
    小猪

所以说,大括号还是很有用的。当然了,你也可以把数组变量和双引号分开就不用大括号了,个人喜好吧。

小生也是PHP新手,如若有错还请大大们及时指正批评,在这先谢谢啦

  1. dylanklc
    2010年3月19日11:29

    大括号使用非常灵活,没看见过官方doc……
    不过有很多第三方总结
    for example (代码片段):

    还有 http://www.php.net/manual/en/language.types.string.php search :braces

    最猛的帖子: http://cowburn.info/2008/01/12/php-vars-curly-braces/