有4种定义方式:1、用单引号包裹字符,语法“'字符内容'”;2、用双引号包裹字符,语法“"字符内容"”;3、用heredoc结构,语法“
本教程操作环境:windows7系统、PHP8.1版、DELL G3电脑
字符串是连续的字符序列,在其它语言中,字符和字符串是两种不同的数据类型,但在 PHP 中,统一将字符和字符串当作字符串数据类型。
在 PHP 中,定义字符串有4种方式,分别是单引号方式、双引号方式、Heredoc 方式、nowdoc 方式。
“单引号”定义方式
定义一个字符串的最简单的方法是用单引号把它包围起来(字符 ')。
要表达一个单引号自身,需在它的前面加个反斜线(\)来转义。要表达一个反斜线自身,则用两个反斜线(\\)。其它任何方式的反斜线都会被当成反斜线本身:也就是说如果想使用其它转义序列例如 \r 或者 \n,并不代表任何特殊含义,就单纯是这两个字符本身。
注意: 不像双引号和 heredoc 语法结构,在单引号字符串中的变量和特殊字符的转义序列将不会被替换。
示例:
<?php echo 'this is a simple string'; echo '<br>'; // 可以录入多行 echo 'You can also have embedded newlines in strings this way as it is okay to do'; echo '<br>'; // 输出: Arnold once said: "I'll be back" echo 'Arnold once said: "I\'ll be back"'; echo '<br>'; // 输出: You deleted C:\*.*? echo 'You deleted C:\\*.*?'; echo '<br>'; // 输出: You deleted C:\*.*? echo 'You deleted C:\*.*?'; echo '<br>'; // 输出: This will not expand: \n a newline echo 'This will not expand: \n a newline'; echo '<br>'; // 输出: Variables do not $expand $either echo 'Variables do not $expand $either'; echo '<br>'; ?>
“双引号”定义方式
如果字符串是包围在双引号(")中, PHP 将对以下特殊的字符进行解析:
序列 | 含义 |
---|---|
\n |
换行(ASCII 字符集中的 LF 或 0x0A (10)) |
\r |
回车(ASCII 字符集中的 CR 或 0x0D (13)) |
\t |
水平制表符(ASCII 字符集中的 HT 或 0x09 (9)) |
\v |
垂直制表符(ASCII 字符集中的 VT 或 0x0B (11)) |
\e |
Escape(ASCII 字符集中的 ESC 或 0x1B (27)) |
\f |
换页(ASCII 字符集中的 FF 或 0x0C (12)) |
\\ |
反斜线 |
\$ |
美元标记 |
\" |
双引号 |
\[0-7]{1,3} |
符合该正则表达式序列的是一个以八进制方式来表达的字符,which silently overflows to fit in a byte (e.g. "\400" === "\000") |
\x[0-9A-Fa-f]{1,2} |
符合该正则表达式序列的是一个以十六进制方式来表达的字符 |
\u{[0-9A-Fa-f]+} |
匹配正则表达式的字符序列是 unicode 码位, 该码位能作为 UTF-8 的表达方式输出字符串 |
和单引号字符串一样,转义任何其它字符都会导致反斜线被显示出来。
用双引号定义的字符串最重要的特征是变量会被解析,即变量解析。
示例:
<?php echo "this is a simple string"; echo "<br>"; // 也可以录入多行 echo "You can also have embedded newlines in strings this way as it is okay to do"; ?>
“Heredoc”定义方式
第三种表达字符串的方法是用 heredoc 句法结构:
结束标识符可以使用空格或制表符(tab)缩进,此时文档字符串会删除所有缩进。 在 PHP 7.3.0 之前的版本中,结束时所引用的标识符必须在该行的第一列。
而且,标识符的命名也要像其它标签一样遵守 PHP 的规则:只能包含字母、数字和下划线,并且必须以字母和下划线作为开头。
<?php $str = <<<EOF url: https://www.php.cn/ EOF; echo $str; ?>
PHP 7.3.0 之后的基础 Heredoc 示例
<?php // 无缩进 echo <<<END a b c \n END; // 4 空格缩进 echo <<<END a b c END;
如果结束标识符的缩进超过内容的任何一行的缩进,则将抛出 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" }
“Nowdoc”定义方式
就象 heredoc 结构类似于双引号字符串,Nowdoc 结构是类似于单引号字符串的。Nowdoc 结构很象 heredoc 结构,但是 nowdoc 中不进行解析操作。这种结构很适合用于嵌入 PHP 代码或其它大段文本而无需对其中的特殊字符进行转义。与 SGML 的 结构是用来声明大段的不用解析的文本类似,nowdoc 结构也有相同的特征。
一个 nowdoc 结构也用和 heredocs 结构一样的标记
示例:
<?php echo <<<'EOD' Example of string spanning multiple lines using nowdoc syntax. Backslashes are always treated literally, e.g. \\ and \'. EOD;
<?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; ?>
注意:
Nowdoc 结构是在 PHP 5.3.0 中加入的。
扩展知识:变量解析
当字符串用双引号或 heredoc 结构定义时,其中的变量将会被解析。
这里共有两种语法规则:一种简单规则,一种复杂规则。简单的语法规则是最常用和最方便的,它可以用最少的代码在一个 string 中嵌入一个变量,一个 array 的值,或一个 object 的属性。
复杂规则语法的显著标记是用花括号包围的表达式。
简单语法
当 PHP 解析器遇到一个美元符号($)时,它会和其它很多解析器一样,去组合尽量多的标识以形成一个合法的变量名。可以用花括号来明确变量名的界线。
<?php $juice = "apple"; echo "He drank some $juice juice.".PHP_EOL; // Invalid. "s" is a valid character for a variable name, but the variable is $juice. echo "He drank some juice made of $juices."; // Valid. Explicitly specify the end of the variable name by enclosing it in braces: echo "He drank some juice made of ${juice}s."; ?>
类似的,一个 array 索引或一个 object 属性也可被解析。数组索引要用方括号(])来表示索引结束的边际,对象属性则是和上述的变量规则相同。
<?php $juices = array("apple", "orange", "koolaid1" => "purple"); echo "He drank some $juices[0] juice.".PHP_EOL; echo "He drank some $juices[1] juice.".PHP_EOL; echo "He drank some $juices[koolaid1] juice.".PHP_EOL; class people { public $john = "John Smith"; public $jane = "Jane Smith"; public $robert = "Robert Paulsen"; public $smith = "Smith"; } $people = new people(); echo "$people->john drank some $juices[0] juice.".PHP_EOL; echo "$people->john then said hello to $people->jane.".PHP_EOL; echo "$people->john's wife greeted $people->robert.".PHP_EOL; echo "$people->robert greeted the two $people->smiths."; // Won't work ?>
从 PHP 7.1.0 起,还支持负数字索引。
<?php $string = 'string'; echo "The character at index -2 is $string[-2].", PHP_EOL; $string[-3] = 'o'; echo "Changing the character at index -3 to o gives $string.", PHP_EOL; ?>
如果想要表达更复杂的结构,请用复杂语法。
复杂(花括号)语法
复杂语法不是因为其语法复杂而得名,而是因为它可以使用复杂的表达式。
任何具有 string 表达的标量变量,数组单元或对象属性都可使用此语法。 表达式的书写方式与在 string 以外的方式相同, 然后用花括号 { 和 } 把它括起来即可。由于 { 无法被转义,只有 $ 紧挨着 { 时才会被识别。可以用 {\$ 来表达 {$。下面的示例可以更好的解释:
<?php // 显示所有错误 error_reporting(E_ALL); $great = 'fantastic'; // 无效,输出: This is { fantastic} echo "This is { $great}"; // 有效,输出: This is fantastic echo "This is {$great}"; // 有效 echo "This square is {$square->width}00 centimeters broad."; // 有效,只有通过花括号语法才能正确解析带引号的键名 echo "This works: {$arr['key']}"; // 有效 echo "This works: {$arr[4][3]}"; // 这是错误的表达式,因为就象 $foo[bar] 的格式在字符串以外也是错的一样。 // 换句话说,只有在 PHP 能找到常量 foo 的前提下才会正常工作;这里会产生一个 // E_NOTICE (undefined constant) 级别的错误。 echo "This is wrong: {$arr[foo][3]}"; // 有效,当在字符串中使用多重数组时,一定要用括号将它括起来 echo "This works: {$arr['foo'][3]}"; // 有效 echo "This works: " . $arr['foo'][3]; echo "This works too: {$obj->values[3]->name}"; echo "This is the value of the var named $name: {${$name}}"; echo "This is the value of the var named by the return value of getName(): {${getName()}}"; echo "This is the value of the var named by the return value of \$object->getName(): {${$object->getName()}}"; // 无效,输出: This is the return value of getName(): {getName()} echo "This is the return value of getName(): {getName()}"; // 无效, 输出: C:\folder\{fantastic}.txt echo "C:\folder\{$great}.txt" // 有效, 输出: C:\folder\fantastic.txt echo "C:\\folder\\{$great}.txt" ?>
也可以在字符串中用此语法通过变量来调用类的属性。
<?php class foo { var $bar = 'I am bar.'; } $foo = new foo(); $bar = 'bar'; $baz = array('foo', 'bar', 'baz', 'quux'); echo "{$foo->$bar}\n"; echo "{$foo->{$baz[1]}}\n"; ?>
注意:
函数、方法、静态类变量和类常量可使用 {$} ,在该字符串被定义的命名空间中将其值作为变量名来访问。只单一使用花括号 ({}) 无法处理从函数或方法的返回值或者类常量以及类静态变量的值。
推荐学习:《PHP视频教程》
The above is the detailed content of What are the ways to define php strings?. For more information, please follow other related articles on the PHP Chinese website!

两种去除方法:1、使用rtrim()函数,语法“rtrim(数值,"0")”,可去除数值后面连续的零。2、用substr_replace(),语法“substr_replace(数值,'', -位置值)”,可从指定位置开始将零替换为空字符。

方法:1、用str_replace(),语法“str_replace(" "," ",$str)”;2、用preg_replace()配合正则表达式,语法“preg_replace('/\s+/'," ",$str)”。

方法:1、用“str_replace(" ","其他字符",$str)”语句,可将nbsp符替换为其他字符;2、用“preg_replace("/(\s|\ \;||\xc2\xa0)/","其他字符",$str)”语句。

php将小数点转为百分比的方法:1、利用“*”运算符将小数乘以100,语法“小数 * 100”,可将小数转为百分值;2、使用字符串拼接符“.”将百分值和“%”符拼接在一起,形成百分比字符串即可,语法“百分值."%"”。

php字符串有下标。在PHP中,下标不仅可以应用于数组和对象,还可应用于字符串,利用字符串的下标和中括号“[]”可以访问指定索引位置的字符,并对该字符进行读写,语法“字符串名[下标值]”;字符串的下标值(索引值)只能是整数类型,起始值为0。

在php中,可以使用substr()函数来读取字符串后几个字符,只需要将该函数的第二个参数设置为负值,第三个参数省略即可;语法为“substr(字符串,-n)”,表示读取从字符串结尾处向前数第n个字符开始,直到字符串结尾的全部字符。

转换方法:1、使用“array_merge_recursive(数组1,数组2,数组3...)”语句将多个数组合并为一个数组;2、使用json_encode()将合并后的数组转为json数据,语法“json_encode(合并后的数组)”。

在php中,可以利用str_replace()函数来去除字符串中的多个指定子字符串,只需要将该函数的第一个参数设为包含多个值的数组,第二个参数设为空字符即可;语法“str_replace(数组,'',$str)”,会将多个子串替换为空字符。


Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

AI Hentai Generator
Generate AI Hentai for free.

Hot Article

Hot Tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

SublimeText3 Linux new version
SublimeText3 Linux latest version

SecLists
SecLists is the ultimate security tester's companion. It is a collection of various types of lists that are frequently used during security assessments, all in one place. SecLists helps make security testing more efficient and productive by conveniently providing all the lists a security tester might need. List types include usernames, passwords, URLs, fuzzing payloads, sensitive data patterns, web shells, and more. The tester can simply pull this repository onto a new test machine and he will have access to every type of list he needs.

WebStorm Mac version
Useful JavaScript development tools

SublimeText3 English version
Recommended: Win version, supports code prompts!
