1.简单句法规则(用花括号界定变量名,适用于PHP所有版本,是php系统设定):
    $a = 'flower';
    echo "She received some $as";
    // 无效;字母s会被当成有效的变量名组成元素,但是这里的变量是$a
    echo "She received some ${a}s"; // 有效
    echo "She received some {$a}s"; // 有效;推荐的使用方法
    我们希望表达的是”她收到一些花“,语境中的flower应该采用复数形式(也就是说应该在后面加上S),但是如果不对变量做任何界定的话,就会出现第一个echo的情况。显然我们希望输出的是$a而不是$as。那么我们通常是怎么来处理这个输出的呢?
    echo "She received some $a"."s";
    echo "She received some ".$a."s";
    // 这两种习惯性的写法应该没有加花括号的写法简洁明了吧?
    注意:不管{是出现在$前面还是后面,只有两者紧挨着时花括号才会被当成是界定符号。不要在之间加空格,要不然就会被当作普通的花括号处理
    echo "She received some { $a}s";
    // 输出的结果为:She received some { flower}s

2.复杂句法规则(用花括号界定表达式等,使用与PHP4+):
    echo "有效的写法: {$arr[4][3]}";
    // 有效;界定多维数组
    echo "有效的写法: {$arr['foo'][3]}";
    // 有效;当在字符串中使用多维数组时,一定要用括号将它括起来
    echo "有效的写法: {$this->width}00";
    // 有效;如果不界定的话,就会变成 $this->width00
    echo "有效的写法: {$this->value[3]->name}";
    // 有效;该例演示了界定链式调用
    echo "有效的写法: $name: {${$name}}";
    // 有效;该例演示的效果实际上是一个可变变量
    echo "有效的写法: {${getName()}}";
    // 有效;该例演示了将函数的返回值作为变量名
    echo "有效的下发: {${$this->getName()}}";
    // 有效;该例演示了将函数的返回值作为变量名
    注意1:echo "这样写有效吗: {getName()}";输出结果为:'这样写有效吗:
    {getName()}'。因为里面不含$,所以花括号不会被当作界定符
    注意2:echo "这样写有效吗:{$arr[foo][3]}"; 在回答这个问题前我们先来进行一个实验:
    error_reporting(E_ALL);
    $arr = array('a', 'b', 'c', 'd'=>'e');
    echo "This is $arr[d]";
    // 我们发现这样写是没有问题的,那么我们像下面这样写呢?
    echo $arr[d];
    产生了这样的错误:
    Notice: Use of undefined constant d - assumed 'd'
    注意:采用了未定义的常量d,可能应该为'd'
    那么如果我们像下面这样修改一下代码的话
    error_reporting(E_ALL);
    $arr = array('a', 'b', 'c', 'd'=>'e');
    define('f', 'd');
    echo $arr[f];
    我 们发现这次没有问题了。可以看出在字符串中数组的索引不加单引号是没有问题的,但是如果这种写法不是出现在字符串当中就会报错,而对于字符串中 {$arr[foo][3]}的解析就是按照非字符串的方式解析的。所以说在字符串当中对数组只加花括号界定而不对索引加单引号的写法是错误的。因为程序 会把不加单引号的索引当作是常量来进行解析,这就产生了错误。正确的写法应该是:
    echo "有效的写法: {$arr['foo'][3]}";
    特 别提醒一点:echo "This is $arr[d]";这种写法虽然能够被程序解析,但这也仅限于数组是一维数组的情况。严谨的写法应该是:echo "This is {$arr['d']}";我的学生曾经在这一点上和我争论过,他说:既然前面一种写法能出结果,为什么一定要用后面一种写法呢?那么,我们再继续修改一 下前面的代码
    error_reporting(E_ALL);
    $arr = array('a', 'b', 'c',
    'd'=>array('e'=>'f')
    );
    echo "This is $arr[d][e]";
    这样还能够被正确解析吗?我只想告诉你,加花括号是严谨的必要的。
    
    注意3:
    error_reporting(E_ALL);
    $arr = array('a', 'b', 'c', 'd');
    echo "This is {$arr[2]}
    ";
    echo "This is {$arr['2']}
    ";
    执行上面的代码。结果是一样的,为什么会这样呢?我只能告诉你PHP是弱类型语言,至于什么叫弱类型语言我就不在这里多说了。自己去Google一下吧。说了这么多,那么最能体现这些句法规则优势的具体应用在什么地方呢?----SQL语句
    // 示例一:
    $SQL1 = "select * from table where id={$_GET['id']}";
    // 示例二:
    $SQL2 = "select * from table where id={$this->id}";

php中的花括号使用详解的更多相关文章

  1. 批处理中的echo命令图文详解

    批处理中的echo命令图文详解 1. Echo 显示当前ECHO的状态:ECHO ON 或者ECHO OFF 2. ECHO ON 将ECHO状态设置为ON,将显示命令行,也就是前面的C:\>类 ...

  2. Java 中的异常和处理详解

    Java 中的异常和处理详解 原文出处: 代码钢琴家 简介 程序运行时,发生的不被期望的事件,它阻止了程序按照程序员的预期正常执行,这就是异常.异常发生时,是任程序自生自灭,立刻退出终止,还是输出错误 ...

  3. C/C++中无条件花括号的妙用

    C/C++中无条件花括号可以形成一个代码块,一个作用域.可以使括号内定义的变量就只在本域(就是这个大括号)内有效,而且不会影响其他域,即使名字相同. 在花括号内,如果变量前面带类型,则相当于新创建一个 ...

  4. Linux中/proc目录下文件详解

    转载于:http://blog.chinaunix.net/uid-10449864-id-2956854.html Linux中/proc目录下文件详解(一)/proc文件系统下的多种文件提供的系统 ...

  5. JQuery在循环中绑定事件的问题详解

    JQuery在循环中绑定事件的问题详解 有个页面上需要N个DOM,每个DOM里面的元素ID都要以数字结尾,比如说 ? 1 2 3 <input type="text" nam ...

  6. C#中的Linq to Xml详解

    这篇文章主要介绍了C#中的Linq to Xml详解,本文给出转换步骤以及大量实例,讲解了生成xml.查询并修改xml.监听xml事件.处理xml流等内容,需要的朋友可以参考下 一.生成Xml 为了能 ...

  7. C#中的预处理器指令详解

    这篇文章主要介绍了C#中的预处理器指令详解,本文讲解了#define 和 #undef.#if.#elif.#else和#endif.#warning和#error.#region和#endregio ...

  8. SVN中tag branch trunk用法详解

    SVN中tag branch trunk用法详解 2010-05-24 18:32 佚名 字号:T | T 本文向大家简单介绍一下SVN中tag branch trunk用法,SVN中tag bran ...

  9. JavaScript中的鼠标滚轮事件详解

    JavaScript中的鼠标滚轮事件详解/*Firefox注册事件*/ ~~~Firefox: addEventListener('DOMMouseScroll', handler, false)if ...

随机推荐

  1. jvm调优-命令大全(jps jstat jmap jhat jstack jinfo)

    现实企业级Java开发中,有时候我们会碰到下面这些问题: OutOfMemoryError,内存不足 内存泄露 线程死锁 锁争用(Lock Contention) Java进程消耗CPU过高 运用jv ...

  2. macaca搭建

    对于新鲜的事务总是那么好奇,在自动化的过程中,有幸了解到macaca,记录下安装过程,具体介绍请移步官网:https://github.com/macacajs/ python版本参考:https:/ ...

  3. windows openssh安装

    下载地址:https://github.com/PowerShell/Win32-OpenSSH/releases 解压好后打开目录,执行以下命令: powershell.exe -Execution ...

  4. [洛谷P2296] NOIP2014 寻找道路

    问题描述 在有向图G 中,每条边的长度均为1 ,现给定起点和终点,请你在图中找一条从起点到终点的路径,该路径满足以下条件: 1 .路径上的所有点的出边所指向的点都直接或间接与终点连通. 2 .在满足条 ...

  5. [BZOJ2600] ricehub

    问题描述 乡间有一条笔直而长的路称为"米道".沿着这条米道上 R 块稻田,每块稻田的坐标均为一个 1 到 L 之间(含 1 和 L)的整数.这些稻田按照坐标以不减的顺序给出,即对于 ...

  6. sed进阶

    下面这些命令未必经常会用到,但当需要时,知道这些肯定是件好事. 一.多行命令 sed命令通常是对一行数据进行处理,然后下一行重复处理. sed编辑器包含了三个可用来处理多行文本的特殊命令 N:将数据流 ...

  7. 大白话vue——slot的作用与使用

    这篇内容本来是不打算放在首页上的,因为内容实在是比较简单,但是在查找slot的使用讲解时发现相关的讲解比较少,要么像官方文档一样简单讲解(看过任然一脸懵逼),也许是自己理解能力比较差...所以在此讲述 ...

  8. [USACO16JAN]愤怒的奶牛Angry Cows (单调队列优化dp)

    题目链接 Solution 应该可以用二分拿部分分,时间 \(O(n^2logn)\) . 然后可以考虑 \(n^2\) \(dp\) ,令 \(f_i\) 代表 \(i\) 点被激活,然后激活 \( ...

  9. [CF1081H]Palindromic Magic

    题意:给两个字符串\(a,b\),求出有多少种不同的字符串能通过从第一个串中取出一个回文串,从第二个串中取出一个回文串,按顺序拼接得到. 题解:证明?看官方题解吧 一些定义: 回文串拆分:\(s=ab ...

  10. 20180816-Java 多态

    Java 多态 多态是同一个行为具有多个不同表现形式或形态的能力. 多态性是对象多种表现形式的体现. 比如我们说"宠物"这个对象,它就有很多不同的表达或实现,比如有小猫.小狗.蜥蜴 ...