php中字串定界符有幾種

2022-09-23 18:00:07

php字串定界符有兩種:1、heredoc定界符,在「<<<」運運算元之後要提供一個識別符號,然後換行,接下來是字串本身,最後要用前面定義的識別符號作為結束標誌。2、nowdoc定界符,在「<<<」運運算元之後要提供一個被單引號括起來的識別符號,然後換行,接下來是字串本身,最後要用前面定義的識別符號作為結束標誌。

php入門到就業線上直播課:進入學習
API 檔案、設計、偵錯、自動化測試一體化共同作業工具:

本教學操作環境:windows7系統、PHP8.1版、DELL G3電腦

PHP定界符

PHP定界符是從PHP4.0版本開始支援的。

定界符用於定義一段格式化的文字,格式化是指文字中的格式將被保留,所以文字中不需要使用定義符。在使用時後接一個識別符號,然後是格式化的文字(即字串),最後使用同樣的識別符號結束字串,這段格式化的文字也可以稱為長字串。

為什麼使用定界符

因為PHP是一個Web程式語言,在程式設計過程中難免會遇到使用echo來輸出大段的HTML程式碼或者JavaScript指令碼的情況。如果用傳統字串輸出的話,肯定要使用大量的跳脫字元來對字串中的特殊字元進行跳脫,比如單引號‘’、雙引號「」等等,難免會出現語法錯誤。

而PHP中定界符能夠定義一段較長的字串,並且可以按照原樣輸出在其內部的東西,包括換行、縮排等格式,在定界符中任何特殊字元都不需要跳脫,而且定界符中的變數也能被解析。這也是為什麼 PHP 要引入定界符的原因之一。

php中字串定界符有幾種

PHP中有兩種定界符:heredoc(雙引號定界符)和nowdoc(單引號定界符)

1、「Heredoc」定義方式

heredoc 句法結構:<<<。在該運運算元之後要提供一個識別符號,然後換行。接下來是字串 string 本身,最後要用前面定義的識別符號作為結束標誌。

結束識別符號可以使用空格或製表符(tab)縮排,此時檔案字串會刪除所有縮排。 在 PHP 7.3.0 之前的版本中,結束時所參照的識別符號必須在該行的第一列。

而且,識別符號的命名也要像其它標籤一樣遵守 PHP 的規則:只能包含字母、數位和下劃線,並且必須以字母和下劃線作為開頭。

<?php
$str = <<<EOF
  url:
  https://www.php.cn/
EOF;
echo $str;
?>

3.png

PHP 7.3.0 之後的基礎 Heredoc 範例

<?php
// 無縮排
echo <<<END
      a
     b
    c
\n
END;
// 4 空格縮排
echo <<<END
      a
     b
    c
    END;

4.png

如果結束識別符號的縮排超過內容的任何一行的縮排,則將丟擲 ParseError 異常:

範例:結束識別符號的縮排不能超過正文的任何一行

<?php
echo <<<END
  a
 b
c
   END;

以上例程在 PHP 7.3 中的輸出:

PHP Parse error:  Invalid body indentation level (expecting an indentation level of at least 3) in example.php on line 4

製表符也可以縮排結束識別符號,但是,關於縮排結束識別符號和內容, 製表符和空格不能混合使用。在以上任何情況下, 將會丟擲 ParseError 異常。 之所以包含這些空白限制,是因為混合製表符和空格來縮排不利於易讀性。

範例:內容(空白)和結束識別符號的不同縮排

<?php
// 以下所有程式碼都不起作用。
// 正文(空格)和結束標記(製表符),不同的縮排
{
    echo <<<END
     a
        END;
}
// 在正文中混合空格和製表符
{
    echo <<<END
        a
     END;
}
// 在結束標記中混合空格和製表符
{
    echo <<<END
          a
         END;
}

以上例程在 PHP 7.3 中的輸出:

PHP Parse error:  Invalid indentation - tabs and spaces cannot be mixed in example.php line 8

內容字串的結束識別符號後面不需要跟分號或者換行符。 例如,從 PHP 7.3.0 開始允許以下程式碼:

範例:在結束識別符號後繼續表示式

<?php
$values = [<<<END
a
  b
    c
END, 'd e f'];
var_dump($values);

以上例程在 PHP 7.3 中的輸出:

array(2) {
  [0] =>
  string(11) "a
  b
    c"
  [1] =>
  string(5) "d e f"
}

2、「Nowdoc」定義方式

就象 heredoc 結構類似於雙引號字串,Nowdoc 結構是類似於單引號字串的。Nowdoc 結構很象 heredoc 結構,但是 nowdoc 中不進行解析操作。這種結構很適合用於嵌入 PHP 程式碼或其它大段文字而無需對其中的特殊字元進行跳脫,與 SGML 的<![CDATA[ ]]> 結構是用來宣告大段的不用解析的文字類似,nowdoc 結構也有相同的特徵。

一個 nowdoc 結構也用和 heredocs 結構一樣的標記 <<<, 但是跟在後面的識別符號要用單引號括起來,即 <<<'EOT'。Heredoc 結構的所有規則也同樣適用於 nowdoc 結構,尤其是結束識別符號的規則。

範例:

<?php
echo <<<'EOD'
Example of string spanning multiple lines
using nowdoc syntax. Backslashes are always treated literally,
e.g. \\ and \'.
EOD;

9.png

<?php

/* 含有變數的更復雜的範例 */
class foo
{
    public $foo;
    public $bar;

    function __construct()
    {
        $this->foo = 'Foo';
        $this->bar = array('Bar1', 'Bar2', 'Bar3');
    }
}

$foo = new foo();
$name = 'MyName';

echo <<<'EOT'
My name is "$name". I am printing some $foo->foo.
Now, I am printing some {$foo->bar[1]}.
This should not print a capital 'A': \x41
EOT;
?>

10.png

注意:

Nowdoc 結構是在 PHP 5.3.0 中加入的。

推薦學習:《》

以上就是php中字串定界符有幾種的詳細內容,更多請關注TW511.COM其它相關文章!