广告
返回顶部
首页 > 资讯 > 后端开发 > PHP编程 >php字符串有哪几种定义方式
  • 510
分享到

php字符串有哪几种定义方式

php字符串php 2022-06-30 20:06:15 510人浏览 薄情痞子
摘要

有4种定义方式:1、用单引号包裹字符,语法“'字符内容'”;2、用双引号包裹字符,语法“"字符内容"”;3、用heredoc结构,语法“<<<EOF 字符内容 EOF;”;4、用nowd

有4种定义方式:1、用单引号包裹字符,语法“'字符内容'”;2、用双引号包裹字符,语法“"字符内容"”;3、用heredoc结构,语法“<<<EOF 字符内容 EOF;”;4、用nowdoc结构,语法“<<<'EOD' 字符内容 EOD;”。Nowdoc和heredoc类似,但它中不进行变量解析操作;这种结构很适合用于嵌入PHP代码或其它大段文本而无需对其中的特殊字符进行转义。

教程操作环境: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>';
?>

1.png

“双引号”定义方式

如果字符串是包围在双引号(")中, PHP 将对以下特殊的字符进行解析:

转义字符
序列含义
\n换行(ASCII 字符集中的 LF 或 0x0A (10))
\r回车(ASCII 字符集中的 CR 或 0x0D (13))
\t水平制表符(ASCII 字符集中的 HT 或 0x09 (9))
\v垂直制表符(ASCII 字符集中的 VT 或 0x0B (11))
\eEscape(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";
?>

2.png

“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"
}

“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 中加入的。

扩展知识:变量解析

当字符串用双引号或 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.";
?>

5.png

类似的,一个 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
?>

6.png

从 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;
?>

7.png

如果想要表达更复杂的结构,请用复杂语法。

复杂(花括号)语法

复杂语法不是因为其语法复杂而得名,而是因为它可以使用复杂的表达式。

任何具有 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";
?>

8.png

注意:

函数、方法、静态类变量和类常量可使用 {$} ,在该字符串被定义的命名空间中将其值作为变量名来访问。只单一使用花括号 ({}) 无法处理从函数或方法的返回值或者类常量以及类静态变量的值。

以上就是php字符串有哪几种定义方式的详细内容,更多请关注编程网其它相关文章!

--结束END--

本文标题: php字符串有哪几种定义方式

本文链接: https://www.lsjlt.com/news/33156.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • php字符串有哪几种定义方式
    有4种定义方式:1、用单引号包裹字符,语法“'字符内容'”;2、用双引号包裹字符,语法“"字符内容"”;3、用heredoc结构,语法“<<<EOF 字符内容 EOF;”;4、用nowd...
    99+
    2022-06-30
    php字符串 php
  • php中字符串定界符有几种
    本教程操作环境:windows7系统、PHP8.1版、DELL G3电脑PHP定界符PHP定界符是从PHP4.0版本开始支持的。定界符用于定义一段格式化的文本,格式化是指文本中的格式将被保留,所以文本中不需要使用定义符。在使用时后...
    99+
    2022-10-18
  • php字符串的定义方式有哪些
    本文小编为大家详细介绍“php字符串的定义方式有哪些”,内容详细,步骤清晰,细节处理妥当,希望这篇“php字符串的定义方式有哪些”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。有4种定义方式:1、用单引号包裹字符,...
    99+
    2023-07-02
  • php截取字符串几种方式
    这篇文章给大家分享的是有关php截取字符串几种方式的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。php截取方法:1、使用substr()截取,可以从字符串的指定位置截取一定长度的字符;2、使用mb_su...
    99+
    2023-06-20
  • python字符串定义的三种方式
    目录1.使用单引号2.使用双引号3.使用三引号Python是一种广泛使用的编程语言,特别是在数据分析、机器学习和人工智能领域。在Python中,字符串是一个非常重要的数据类型,可用来...
    99+
    2023-05-20
    python字符串定义 python定义字符串
  • python字符串定义的方式有哪些
    本篇文章和大家了解一下python字符串定义的方式有哪些。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。Python是一种广泛使用的编程语言,特别是在数据分析、机器学习和人工智能领域。在Python中,字符串是一个非常重要...
    99+
    2023-07-06
  • php定义字符串的方法有哪些
    这篇文章给大家分享的是有关php定义字符串的方法有哪些的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。php定义字符串有4种方法:1、用单引号进行定义,例“'abc'”;2、用双引号进行定义,例“&...
    99+
    2023-06-15
  • php定义数组有几种方式
    在PHP中,有三种常见的方式来定义数组:1. 索引数组:使用数字作为索引的数组。可以通过在方括号中指定索引位置来定义。```php$...
    99+
    2023-08-28
    PHP
  • php声明字符串变量有几种方法
    本教程操作环境:windows7系统、PHP7.1版、DELL G3电脑php声明字符串变量1、利用双引号语法:$变量名="字符串内容";示例:<php $str="hello"; var_du...
    99+
    2018-01-13
    php 声明字符串变量
  • Python 字符串换行的几种方式
    第一种: x0 = '<xml version="1.0">' \ '<ol>' \ ' <li><a href="/python">Python</a>...
    99+
    2023-01-30
    几种 字符串 换行
  • C#转义字符的处理方式有几种
    这篇文章主要介绍“C#转义字符的处理方式有几种”,在日常操作中,相信很多人在C#转义字符的处理方式有几种问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C#转义字符的处理方式有几种”的疑惑有所帮助!接下来,请跟...
    99+
    2023-06-18
  • php声明字符串变量有几种
    在 PHP 中,声明字符串变量有三种方式:使用单引号,使用双引号,以及使用 heredoc 和 nowdoc。单引号:单引号字符串中的变量不会被解析,所有特殊字符(如换行符和引号)都需要使用转义符号“\”。$name = 'John...
    99+
    2023-05-14
  • 聊聊php提取字符串前几个字符的几种方法
    在PHP编程中,字符串操作是最常见的操作之一。有时候需要截取字符串的前几个字符,以满足程序的需求。本文将介绍PHP中如何取字符串前几个字符。PHP语言提供了多种方法来截取字符串,以下是三种最常用的方法:使用substr()函数来提...
    99+
    2023-05-14
  • Java实现字符串排序的几种方式
    创建实体类(此处引入了lombok) @Data@AllArgsConstructor@NoArgsConstructorpublic class Test{ private int Id; private String Tes...
    99+
    2023-09-14
    java 算法 排序算法
  • Java 切割字符串的几种方式集合
    目录Java 切割字符串的几种方式1、StringTokenizer切割2、..split("*")分割3、调用String自己的api subString()java优雅...
    99+
    2022-11-12
  • 总结php中字符串转为数字类型的几种方式
    在PHP中,字符串和数字是两种不同的数据类型。字符串类型的数据,是由一连串的字符组成的,而数字类型的数据则是由数字字符组成的,但它可以直接进行数学运算。有时候,当我们需要将一个字符串类型的数据转换成数字类型的数据的时候,就需要使用PHP提供...
    99+
    2023-05-14
  • C语言中字符串的两种定义方式详解
    目录方式1方式2总结我们知道C语言中是没有字符串这种数据类型的,我们只能依靠数组进行存储,即字符数组,而我们定义并且初始化数组有两种方式。下面将给大家介绍这两种方式并且介绍这两种方式...
    99+
    2022-11-12
  • C++中两种字符串定义方式和区别介绍
    目录前言概念定义方式计算机的存储方式总结前言 在学习字符串这方面的内容时,发现字符串定义的两种方式虽然内容相同但还是有细微的区别 概念 字符串就是一串用双引号连接起来的字符串字面值,...
    99+
    2022-11-12
  • C++将字符串格式化的几种方式总结
    目录C++将字符串格式化的几种方式使用snprintf格式化字符串使用boost::format格式化字符串使用stringstream格式化字符串C++11的一个格式化字符串的黑科...
    99+
    2023-01-28
    C++字符串格式化 C++字符串 C++格式化
  • JavaScript 中替换字符串的方法有几种
    这篇文章主要介绍“JavaScript 中替换字符串的方法有几种”,在日常操作中,相信很多人在JavaScript 中替换字符串的方法有几种问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望...
    99+
    2022-10-19
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作