鍍金池/ 問答/PHP  iOS/ 雙引號變量解析枚舉

雙引號變量解析枚舉

由于不理解,就一個勁的測試,得出以下結(jié)果:
一、標(biāo)量變量解析
實例:

<?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} $ ${c} $73xv7xf ${e} ${f}";
?>

二、數(shù)組單元解析
實例一:

<?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']}";
?>

像字符串中表示對象的成員常量、對象的靜態(tài)成員,我都不會。
雖然測試了一些表示形式,但我根本就不理解,請指教

回答
編輯回答
不歸路

你的問題主要是 單雙引號 區(qū)別問題。
建議上php官網(wǎng)php.net查看php手冊

2018年1月30日 12:19
編輯回答
薄荷糖

我的理解:

1、雙引號里解析php變量,加{}的目的是為了防止變量名字符串結(jié)合,避免產(chǎn)生變量不存在的錯誤,比如下面這段代碼

<?php 

$a = 'aaa';
$b = 'bbb';

echo "$ac$b";

exit;

你原本想要輸出的結(jié)果是aaacbbb;但是由于$ac中的變量$a和字符串c沒有區(qū)分開,導(dǎo)致php解析變量的時候,會把$ac當(dāng)做一個變量來進(jìn)行處理;但是如果你加一個{}就完全把php變量字符串隔離開了,如下:

<?php 

$a = 'aaa';
$b = 'bbb';

echo "{$a}c{$b}";

exit;

這樣的話,就能輸出你想要的結(jié)果aaacbbb

2、代碼里:echo "<br/>${a} $ ${c} $b57fdb3 ${e} ${f}"這樣的方法容易產(chǎn)生代碼的誤讀,因為這種寫法并不常見而且沒有意義。
測試過這種寫法是可以,但是太過于混亂,我的理解:雙引號中使用{}只是隔離php變量和字符串的作用,就自己的不見經(jīng)傳的理解,覺得,這樣的做法可以讓zend引擎在進(jìn)行詞法、語法分析的時候能夠更快的知道{}里包裹的就是php變量,是需要解析的東西

3、在遇到變量要和字符串結(jié)合輸出的場景,我一般都會把代碼和字符串分隔開來,用.連接符來連接,如下面:

<?php 

$a = 'aaa';
$b = 'bbb';

echo $a . 'b' . $b;

exit;

4、你說的對象成員在雙引號的輸出也同上吧,你完全可以采用3里面的描述,把對象成員放在引號外面:

class A{
    var $test=['green','a'=>'blue'];
}
$obj = new A;
echo $obj->test[0] . ' ' . $obj->test['a'];

5、不要糾結(jié)于在字符串中輸出對象成員這種問題,因為在實際工作中,這種寫法并不多,而且對代碼也并不友好,不容易排錯,如果把變量(對象成員)和字符串(引號)分開寫,會讓代碼更清晰易懂;

我自己的一點理解,希望能對你有幫助;

2017年4月5日 10:53