PHP - Heredoc & Nowdoc

PHP cung cấp hai lựa chọn để khai báo chuỗi có dấu nháy đơn hoặc nháy kép dưới dạng cú pháp heredoc newdoc .

  • Chuỗi được đặt trong dấu nháy đơn sẽ không giải thích các ký tự thoát và không mở rộng các biến.

  • Mặt khác, nếu bạn khai báo một chuỗi được bao bởi dấu nháy kép mà chứa chính ký tự dấu nháy kép, bạn cần phải thoát nó bằng ký hiệu "\". Cú pháp heredoc cung cấp một phương pháp thuận tiện.

Heredoc Strings in PHP

Các chuỗi heredoc trong PHP tương tự như chuỗi được đặt trong dấu nháy kép, nhưng không có dấu nháy kép. Điều này có nghĩa là chúng không cần phải thoát khỏi dấu nháy và có thể mở rộng các biến.

Heredoc Syntax

$str = <<<IDENTIFIER
place a string here
it can span multiple lines
and include single quote ' and double quotes "
IDENTIFIER;

Đầu tiên, bắt đầu với toán tử "<<<". Sau toán tử này, một định danh được cung cấp, sau đó là một dòng mới. Chuỗi sẽ theo sau, và sau đó là cùng một định danh để đóng dấu ngoặc kép. Chuỗi có thể trải dài qua nhiều dòng và bao gồm các dấu nháy đơn (‘) hoặc dấu nháy kép (").

Định danh đóng có thể được thụt vào bằng khoảng trắng hoặc tab, trong trường hợp đó, khoảng thụt sẽ bị loại bỏ khỏi tất cả các dòng trong chuỗi tài liệu.

Example

Định danh phải chỉ chứa các ký tự chữ cái, số và dấu gạch dưới, và bắt đầu bằng một dấu gạch dưới hoặc một ký tự không phải số. Định danh đóng không được chứa bất kỳ ký tự nào khác ngoài dấu chấm phẩy (;). Hơn nữa, ký tự trước và sau định danh đóng phải chỉ là ký tự xuống dòng.

Hãy xem xét ví dụ sau −

<?php  
   $str1 = <<<STRING
   Hello World
      PHP Tutorial
         by TutorialsPoint
   STRING;

   echo $str1;
?>

Nó sẽ tạo ra output

Hello World
    PHP Tutorial
        by TutorialsPoint

Example

Định danh đóng có thể có hoặc không có khoảng cách thụt lề sau cột đầu tiên trong trình soạn thảo. Khoảng cách thụt lề, nếu có, sẽ bị loại bỏ. Tuy nhiên, định danh đóng không được thụt lề xa hơn bất kỳ dòng nào trong phần thân. Nếu không, một lỗi phân tích (ParseError) sẽ được phát sinh. Hãy xem xét ví dụ sau và kết quả của nó −

<?php  
   $str1 = <<<STRING
   Hello World
      PHP Tutorial
   by TutorialsPoint
         STRING;
         
   echo $str1;
?>

Nó sẽ tạo ra output

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

Example

Các dấu ngoặc kép trong heredoc không cần phải được thoát, nhưng các chuỗi thoát của PHP vẫn có thể được sử dụng. Cú pháp heredoc cũng mở rộng các biến.

<?php  
   $lang="PHP";
   echo <<<EOS
   Heredoc strings in $lang expand vriables.
   The escape sequences are also interpreted.
   Here, the hexdecimal ASCII characters produce \x50\x48\x50
   EOS;
?>

Nó sẽ tạo ra output

Heredoc strings in PHP expand vriables.
The escape sequences are also interpreted.
Here, the hexdecimal ASCII characters produce PHP

Nowdoc Strings in PHP

Một chuỗi nowdoc trong PHP tương tự như chuỗi heredoc, ngoại trừ việc nó không mở rộng các biến và cũng không giải thích các chuỗi thoát.

<?php  
   $lang="PHP";

   $str = <<<'IDENTIFIER'
   This is an example of Nowdoc string.
   it can span multiple lines
   and include single quote ' and double quotes "
   IT doesn't expand the value of $lang variable
   IDENTIFIER;

   echo $str;
?>

Nó sẽ tạo ra output

This is an example of Nowdoc string.
it can span multiple lines
and include single quote ' and double quotes "
IT doesn't expand the value of $lang variable

Cú pháp nowdoc tương tự như cú pháp heredoc, ngoại trừ việc định danh theo sau toán tử "<<<" cần phải được đặt trong dấu nháy đơn. Định danh của nowdoc cũng tuân theo các quy tắc cho định danh heredoc.

Chuỗi Heredoc giống như chuỗi được đặt trong dấu nháy đôi mà không cần thoát. Chuỗi Nowdoc giống như chuỗi được đặt trong dấu nháy đơn mà không cần thoát.