由于不理解,就一个劲的测试,得出以下结果:
一、标量变量解析
实例:
<?php
$a=5;
$b=5.5;
$c=true;
$d=false;
$e=null;
$f='Hello world!';
echo "$a $b $c $d $e $f";
echo "<br/>{$a} {$b} {$c} {$d} {$e} {$f}";
echo "<br/>${a} ${b} ${c} ${d} ${e} ${f}";
?>
二、数组单元解析
实例一:
<?php
$arr=['green','a'=>'blue'];
echo "$arr[0] $arr[a]";
echo "<br/>{$arr[0]} {$arr['a']}";
?>
实例二:
<?php
$arr=[['green','a'=>'blue'],'x'=>['green','a'=>'blue']];
echo "{$arr[0][0]} {$arr[0]['a']} {$arr['x'][0]} {$arr['x']['a']}";
?>
三、对象成员解析
实例一:
<?php
class A{
var $test='red';
}
$obj = new A;
echo "$obj->test";
echo "<br/>{$obj->test}";
?>
实例二:
<?php
class A{
var $test=['green','a'=>'blue'];
}
$obj = new A;
echo "{$obj->test[0]} {$obj->test['a']}";
?>
实例三:
<?php
class A{
function test1(){return 'red';}
function test2(){return ['green','a'=>'blue'];}
}
$obj = new A;
echo "{$obj->test1()} {$obj->test2()[0]} {$obj->test2()['a']}";
?>
像字符串中表示对象的成员常量、对象的静态成员,我都不会。
虽然测试了一些表示形式,但我根本就不理解,请指教
我的理解:
1、双引号里解析php变量,加
{}
的目的是为了防止变量名和字符串结合,避免产生变量不存在的错误,比如下面这段代码你原本想要输出的结果是
aaacbbb
;但是由于$ac
中的变量$a
和字符串c
没有区分开,导致php解析变量的时候,会把$ac
当做一个变量来进行处理;但是如果你加一个{}
就完全把php变量和字符串隔离开了,如下:这样的话,就能输出你想要的结果
aaacbbb
了2、代码里:
echo "<br/>${a} ${b} ${c} ${d} ${e} ${f}"
这样的方法容易产生代码的误读,因为这种写法并不常见而且没有意义。测试过这种写法是可以,但是太过于混乱,我的理解:双引号中使用{}只是隔离php变量和字符串的作用,就自己的不见经传的理解,觉得,这样的做法可以让zend引擎在进行词法、语法分析的时候能够更快的知道
{}
里包裹的就是php变量,是需要解析的东西3、在遇到变量要和字符串结合输出的场景,我一般都会把代码和字符串分隔开来,用
.
连接符来连接,如下面:4、你说的
对象成员
在双引号的输出也同上吧,你完全可以采用3
里面的描述,把对象成员放在引号外面:5、不要纠结于在字符串中输出对象成员这种问题,因为在实际工作中,这种写法并不多,而且对代码也并不友好,不容易排错,如果把变量(对象成员)和字符串(引号)分开写,会让代码更清晰易懂;
我自己的一点理解,希望能对你有帮助;