天天看點

【PHP面試題】PHP的字元串的定義方式及各自差別(單引号,雙引号,heredoc,newdoc)?

一、定義方式

單引号/ 雙引号 / heredoc 和 newdoc;(三種)
1、 單引号
// 單引号定義變量
$str = 'a b c d e f $a g'; // 此時$a會被原樣輸出
           
2、 雙引号
// 此處可以把 '{$a}' 換成特殊字元,如 & $a &
// 原因:單引号的執行效率更高,且将name放到外面可讀性更強。
$str = "a b c d e f '{$a}' g h"; // a b c d e f $a的值 g h 
           
注:雙引号中包含單引号,單引号中包含變量,該變量是會被解析的,因為最外層是雙引号,且裡面的單引号會被原樣輸出.

使用場景:一般會用于sql語句

不推薦寫法:

$sql = "SELECT * FROM user WHERE name = '$name'"

;

推薦寫法:

$sql = 'SELECT * FROM user WHERE name = \''.$name.'\''

;
3、 heredoc
  • 開頭和結尾的名字保持一緻;
  • 結尾要放到一行的開頭(前面不可以有任何字元,包括空格)【适用于超長的内容】;
  • 功能與雙引号一緻;
$str = <<<EoT
 . 
 . // 内容可以為字元串,可以寫變量、轉義字元等,都可以被解析(功能與雙引号一緻)
 .
 .
EoT;
           
4、 newdoc
  • 開頭和結尾名字要保持一緻,且定界符處用單引号括起來;
  • 結尾要放到一行的開頭(前面不可以有任何字元,包括空格)【适用于超長的内容】;
  • 功能與單引号一緻
// newdoc
$str = <<<'EoT'
 .
 .
 .
 .
EoT;
           

二、差別

  • 單引号:
    • (1) 單引号不能解析變量;
    • (2) 單引号不能解析轉義字元,隻能解析單引号和反斜杠本身;
    • (3) 變量和變量、變量和字元串、字元串和字元串之間可以用.連接配接;
    • (4) 單引号的效率更高;
  • 雙引号:
    • (1) 雙引号可以解析變量,變量可以使用特殊字元和{}包含;
    • (2) 雙引号可以解析所有轉義字元;
    • (3) 也可以使用.來連接配接;
  • heredoc 和 newdoc:
    • (1) heredoc 功能類似于 雙引号;
    • (2) newdow 功能類似于 單引号;
    • (3) 兩者都是用來處理大文本。

繼續閱讀