💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
<div style="height:30px;line-height:30px;background:#f1f1f1;font-weight:bold;font-size:14px;padding:5px 10px;margin-bottom:10px;border-bottom:1px solid #ccc">类型>String字符类型</div> 一个字符串 string 就是由一系列的字符组成,其中每个字符等同于一个字节。这意味着 PHP 只能支持 256 的字符集,因此不支持 Unicode 。详见字符串类型详解。 * * * * * **字符串的四种表达方式:** ~~~ 单引号 双引号 heredoc 语法结构 nowdoc 语法结构(自 PHP 5.3.0 起) ~~~ **1.单引号** * * * * * <div class=""> 要表达一个单引号自身,需在它的前面加个反斜线(\)来转义。要表达一个反斜线自身,则用两个反斜线(\\)。其它任何方式的反斜线都会被当成反斜线本身:也就是说如果想使用其它转义序列例如 \r 或者 \n,并不代表任何特殊含义,就单纯是这两个字符本身。 **注意:** 1.不像双引号和 heredoc 语法结构,在单引号字符串中的变量和特殊字符的转义序列将不会被替换。 2.用双引号定义的字符串最重要的特征是变量会被解析,双引号中单引号中变量会被解析。引号中变量末尾应该用空格或者专用字符{}等分割开来。 3.Heredoc 结构, 结束标识符这行除了可能有一个分号(;)外,绝对不能包含其它字符。这意味着标识符不能缩进,分号的前后也不能有任何空白或制表符。更重要的是结束标识符的前面必须是个被本地操作系统认可的换行,比如在 UNIX 和 Mac OS X 系统中是 \n,而结束定界符(可能其后有个分号)之后也必须紧跟一个换行。 ~~~ 非法: <?php class foo { public $bar = <<<EOT bar EOT; } ?> ~~~ ~~~ 合法: <?php $str = <<<EOD Example of string spanning multiple lines using heredoc syntax. EOD; ~~~ ~~~ 如果定义了变量跟函数,一下也是合法的。 echo <<<EOT My name is "$name". I am printing some $foo->foo. Now, I am printing some {$foo->bar[1]}. This should print a capital 'A': \x41 EOT; ~~~ * * * * * **2.双引号** 如果字符串是包围在双引号(")中, PHP 将对一些特殊的字符进行解析: ~~~ echo "\n 1"; 在html中输出1,查看源码是有空格的。 echo " 1"; 等同于上面; ~~~ * * * * * #### # Heredoc 结构 第三种表达字符串的方法是用 heredoc 句法结构:<<<。在该运算符之后要提供一个标识符,然后换行。接下来是字符串 string 本身,最后要用前面定义的标识符作为结束标志。 也可以把 Heredoc 结构用在函数参数中来传递数据: Example #3 Heredoc 结构在参数中的示例 ~~~ <?php var_dump(array(<<<EOD foobar! EOD )); ?> ~~~ 自 PHP 5.3.0 起还可以在 Heredoc 结构中用双引号来声明标识符: Example #5 在 heredoc 结构中使用双引号 ~~~ <?php echo <<<"FOOBAR" Hello World! FOOBAR; ?> ~~~ * * * * * **Nowdoc 结构** 就象 heredoc 结构类似于双引号字符串,Nowdoc 结构是类似于单引号字符串的。Nowdoc 结构很象 heredoc 结构,但是 nowdoc 中不进行解析操作。这种结构很适合用于嵌入 PHP 代码或其它大段文本而无需对其中的特殊字符进行转义。与 SGML 的 <![CDATA[ ]]> 结构是用来声明大段的不用解析的文本类似,nowdoc 结构也有相同的特征。 一个 nowdoc 结构也用和 heredocs 结构一样的标记 <<<, 但是跟在后面的标识符要用单引号括起来,即 <<<'EOT'。Heredoc 结构的所有规则也同样适用于 nowdoc 结构,尤其是结束标识符的规则。 常用案例 ~~~ <?php // 显示所有错误 error_reporting(E_ALL); $great = 'fantastic'; // 无效,输出: This is { fantastic} echo "This is { $great}"; // 有效,输出: This is fantastic echo "This is {$great}"; 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()}"; ?> ~~~ <div style="background:#f0f0f0;text-align:center;font-size:12px;padding:20p"> © 2017-版权 杜二红 如要转载,请注明出处! </div>