PHP 8.5.0 Alpha 1可用于测试

A类一串是一系列字符,其中字符是与字节相同。这意味着PHP只支持256个字符集,因此不提供本机Unicode支持。请参见字符串的详细信息类型.

注释:在32位版本中一串最大可达2GB(最多2147483647字节)

语法

A类一串文字可以用四种不同的方式指定:

单引号

指定一串是把它装在一个盒子里引号(字符').

要指定单引号,请用反斜杠转义(\).要指定文字反斜杠,请将其加倍(\\).将处理所有其他反斜杠实例作为反斜杠:这意味着其他转义序列可能习惯于,例如\第页\n个,将按规定逐字输出,而不是有任何特殊的含义。

注释:双引号赫代克语法,变量和转义序列对于特殊字符将当它们被扩展时出现在单引号中一串第条。

示例#1语法变量

<?php
回声'这是一个简单字符串',PHP_终止;

回声
'您也可以在中嵌入换行符
按原样串
可以这样做'
,PHP_终止;

//输出:阿诺德曾经说过:“我会回来的”
回声阿诺德曾经说过:“我会回来的”,PHP_终止;

//输出:您删除了C:\*。*?
回声'您删除了C:\\*。*?',PHP_终止;

//输出:您删除了C:\*。*?
回声'您删除了C:\*。*?',PHP_终止;

//输出:这不会展开:\n换行
回声'这不会展开:\n换行',PHP语言;

//输出:变量也不$expand$
回声'变量也不$expand$',PHP_终止;
?>

双引号

如果一串用双引号括起来("),PHP将解释特殊字符的以下转义序列:

转义字符
顺序 含义
\n个 换行(LF或ASCII中的0x0A(10))
\第页 回车(CR或ASCII中的0x0D(13))
\t吨 水平选项卡(HT或ASCII中的0x09(9))
\v(v) 垂直选项卡(VT或ASCII中的0x0B(11))
\e(电子) 转义(ASCII中的ESC或0x1B(27))
\(f) 换页(FF或ASCII中的0x0C(12))
\\ 反斜杠
\$ 美元符号
\" 双引号
\[0-7]{1,3} 八进制:与正则表达式匹配的字符序列[0-7]{1,3}是八进制表示法中的字符(例如。“\101”===“A”),它会自动溢出以容纳一个字节(例如。"\400" === "\000")
\x[0-9A-Fa-f]{1,2} 十六进制:与正则表达式匹配的字符序列[0-9A-Fa-f]{1,2}是十六进制表示法中的字符(例如。“\x41”===“A”)
\u{[0-9A-Fa-f]+} Unicode:与正则表达式匹配的字符序列[0-9A-传真]+是一个Unicode代码点,它将作为该代码点的UTF-8表示输出到字符串。序列中需要使用大括号。例如。“\u{41}”===“A”

如单引号所示一串s、 转义任何其他字符将也会打印反斜杠。

双引号最重要的特点一串s是事实变量名将被展开。请参见字符串插值对于细节。

赫里多克

第三种定界方法一串s是heredoc语法:<<<。在此运算符之后,标识符为提供,然后换行。这个一串它自己跟着,然后再次使用相同的标识符来关闭报价。

结束标识符可以用空格或制表符缩进,在这种情况下缩进将从文档字符串中的所有行中删除。在PHP 7.3.0之前,结束标识符必须从行的第一列开始。

此外,结束标识符必须遵循与任何PHP中的其他标签:它只能包含字母数字字符和下划线,并且必须以非数字字符或下划线开头。

示例#2 PHP 7.3.0中的Heredoc基本示例

<?php
//无压痕
回波<<<结束

b
c(c)
\n个
结束;

//4格压痕
回波<<<结束

b
c(c)
结束;

PHP 7.3中上述示例的输出:

bc(c)bc(c)

如果结束标识符缩进超过正文的任何行,则分析错误将抛出:

示例#3结束标识符的缩进不得超过正文的任何行

<?php
回波<<<结束

b
c(c)
结束;

PHP 7.3中上述示例的输出:

分析错误:第4行example.php中的正文缩进级别无效(要求缩进级别至少为3)

但是,如果结束标识符缩进,也可以使用制表符,制表符和空格不能关于结束标识符的缩进和正文的缩进(直至结束标识符)。在这些情况下分析错误将被抛出。由于混合了制表符和缩进空间对易读性有害。

示例#4正文(空格)结束标识符的不同缩进

<?php
//以下所有代码都不起作用。

//正文(空格)结束标记(制表符)的不同缩进
{
回波<<<结束

结束;
}

//在主体中混合空格和制表符
{
回波<<<结束

结束;
}

//在结束标记中混合空格和制表符
{
回波<<<结束

结束;
}

PHP 7.3中上述示例的输出:

分析错误:缩进无效-example.php第8行中不能混合制表符和空格

正文字符串的结束标识符不需要后跟分号或换行符。例如,以下代码自PHP 7.3.0起允许:

示例#5在结束标识符后继续表达式

<?php
$值
=[<<<结束

b
c(c)
结束,“d e f”];
变量转储($价值);

PHP 7.3中上述示例的输出:

数组(2){[0] =>字符串(11)“abc“[1] =>字符串(5)“d e f”}
警告

如果结束标识符位于行的开头,则无论它是否是另一个单词的一部分,都可以考虑作为结束标识符,并导致分析错误.

示例#6字符串正文中的结束标识符往往会导致ParseError

<?php
$值
=[<<<结束

b
结束惯性导航与制导
结束
,“d e f”];

PHP 7.3中上述示例的输出:

分析错误:语法错误,意外标识符“ING”,第5行example.php中应为“]”

为避免此问题,遵循以下简单规则是安全的:不要选择出现在正文中的单词作为结束标识符.

警告

在PHP 7.3.0之前,需要注意的是结束标识符不能包含除分号以外的其他字符(;).这尤其意味着标识符不能缩进,并且可能没有任何空格或分号前后的制表符。认识到这一点也很重要结束标识符之前的第一个字符必须是换行符,如下所示由本地操作系统定义。这是\n个UNIX系统,包括macOS。结束分隔符也必须是后跟换行符。

如果这个规则被打破,并且结束标识符不是“干净的”,它将不被视为结束标识符,PHP将继续查找一个。如果在结束之前没有找到正确的结束标识符当前文件的最后一行将导致解析错误。

示例#7 PHP 7.3.0之前的无效示例

<?php
foo公司{
公众的
$巴=<<<EOT
酒吧
EOT;
}
//标识符不能缩进
?>

示例#8有效示例,甚至在PHP 7.3.0之前

<?php
foo公司{
公众的
$巴=<<<EOT
酒吧
EOT;
}
?>

包含变量的Heredocs不能用于初始化类属性。

Heredoc文本的行为就像双引号一串,没有双引号。这意味着heredoc中的引号不需要转义,但上面列出的转义代码仍然可以使用。变量包括展开,但在表达复杂变量时必须同样小心在heredoc内部一串第条。

示例#9 Heredoc字符串引用示例

<?php
$str(美元)
=<<<爆炸物处理
字符串示例
跨越多条线
使用heredoc语法。
爆炸物处理;

/*更复杂的例子,有变量。 */
foo公司
{
无功功率,无功功率
$foo美元;
无功功率,无功功率
$巴;

功能
__构造()
{
$这个->foo公司=“Foo”;
$这个->酒吧=数组('酒吧1',“Bar2”,“Bar3”);
}
}

$foo美元=新foo公司();
$名称=“我的名字”;

回波<<<EOT
我的名字是“$名称“.我正在打印一些$foo美元->foo公司.
现在,我正在打印一些
{$foo美元->酒吧[1]}.
这应该打印大写字母“a”:\x41
EOT;
?>

上述示例将输出:

我的名字是“MyName”。我正在打印一些Foo。现在,我正在打印一些Bar2。这应该打印大写字母“a”:a

也可以使用Heredoc语法将数据传递给函数论据:

示例#10参数示例中的Heredoc

<?php
变量转储
(阵列(<<<EOD
福巴!
爆炸物处理
));
?>

可以初始化静态变量和类使用Heredoc语法的属性/常量:

示例#11使用Heredoc初始化静态值

<?php
//静态变量
功能foo公司()
{
静止的
$巴=<<<标签
这里什么都没有。..
标签;
}

//类属性/常量
foo公司
{
常数
酒吧=<<<FOOBAR(福巴尔)
常量示例
FOOBAR公司;

公众的
美元baz=<<<FOOBAR(福巴尔)
属性示例
FOOBAR公司;
}
?>

打开的Heredoc标识符可以是可选的用双引号括起来:

示例#12在Heredoc中使用双引号

<?php
echo<<<“FOOBAR”
你好,世界!
FOOBAR公司;
?>

诺多克

现在,heredocs对单引号字符串的作用就像heredocs对双引号字符串的影响一样串。指定nowdoc与指定heredoc类似,但字符串插值已完成在一个nowdoc里面。该结构非常适合于无需逃逸。它与SGML共享一些共同的功能<![CDATA[]]>构造,因为它声明了一个不用于分析的文本块。

nowdoc使用相同的<<<用于heredocs的序列,但后面的标识符包含在单引号,例如。<<<“EOT”。的所有规则heredoc标识符也适用于nowdoc标识符,尤其是那些关于结束标识符的外观。

示例#13 Nowdoc字符串引用示例

<?php
echo<<<“爆炸物处理”
跨越多条线的字符串示例
使用nowdoc语法。反斜杠总是按字面意思处理,
例如\\和\\'。
爆炸物处理;

上述示例将输出:

跨越多条线的字符串示例使用nowdoc语法。反斜杠总是按字面意思处理,例如\\和\\'。

示例#14 Nowdoc字符串引用变量示例

<?php
foo公司
{
公众的
$foo美元;
公众的
$巴;

功能
__构造()
{
$这个->foo公司=“Foo”;
$这个->酒吧=数组(“Bar1”,'酒吧2',“Bar3”);
}
}

$foo美元=新foo公司();
$名称=“我的名字”;

echo<<<“EOT”
我的名字是“$name”。我正在打印一些$foo->foo。
现在,我正在打印一些{$foo->bar[1]。
这不应打印大写字母“a”:\x41
EOT;
?>

上述示例将输出:

我的名字是“$name”。我正在打印一些$foo->foo。现在,我正在打印一些{$foo->bar[1]。这不应打印大写字母“a”:\x41

示例#15静态数据示例

<?php
foo公司{
公众的
$bar(美元)=<<<“EOT”
酒吧
EOT;
}
?>

字符串插值

一串用双引号或heredoc指定,变量可以在其中进行替换。

有两种类型的语法:a基本的一个和一个先进的一个。基本语法是最常用、最方便的。它提供了一种嵌入变量阵列值,或对象中的属性一串用最少的努力。

基本语法

如果是美元符号($)遇到,字符后面可以用在变量名中的将被解释作为替代品。

示例#16字符串插值

<?php
$果汁
=“苹果”;

回声
“他喝了一些$果汁果汁。".PHP_终止;

?>

上述示例将输出:

他喝了一些苹果汁。

形式上,基本变量替换语法的结构是如下:

字符串变量::可变名称(偏移或属性)?|${表达式}偏移或属性:字符串中的偏移|存储中的属性静态偏移::[姓名]|[变量名称]|[整体-横向]存储中的属性:->姓名变量名称::$名称姓名::[a-zA-Z_\x80-\xff]*
警告

这个${表达式}自起,语法已弃用PHP 8.2.0,因为它可以解释为可变变量:

<?php
常数foo公司=“bar”;
$foo美元=“foo”;
$bar(美元)=“bar”;
变量转储("${foo公司}");
变量转储("${(foo公司)}");
?>

PHP 8.2中上述示例的输出:

不推荐:不推荐在字符串中使用${var},请在文件的第6行使用{$var}不推荐:不推荐在字符串中使用${expr}(变量),请在文件的第9行使用{${expr}}字符串(3)“foo”字符串(3)“bar”

上述示例将输出:

字符串(3)“foo”字符串(3)“bar”
这个先进的应该使用字符串插值语法。

注释:如果无法形成有效名称,美元符号将保留作为字符串中的逐字:

<?php
回声“没有发生插值$\n”;
回声
“没有发生插值$\n”;
回声
“没有发生插值$2\n”;
?>

上述示例将输出:

没有发生插值$无插值$已经发生了没有发生插值$2

示例#17插值数组或属性的第一个维度的值

<?php
$果汁
=数组(“苹果”,“橙色”,“字符串键”=>“紫色”);

回声
“他喝了一些$果汁[0]果汁。";
回声
PHP语言;
回声
“他喝了一些$果汁[1]果汁。";
回声
PHP_终止;
回声
“他喝了一些$果汁[字符串键]果汁。";
回声
PHP_终止;

A类{
公众的
%s美元=“字符串”;
}

0美元=新A类();

回声
“对象值:0美元->.";
?>

上述示例将输出:

他喝了一些苹果汁。他喝了一些橙汁。他喝了一些紫色的果汁。对象值:字符串。

注释:数组键必须未加引号,因此无法使用基本语法将常量作为键。使用先进的而不是语法。

自PHP 7.1.0起消极的数字索引是支持。

示例#18负数字索引

<?php
$string($string)
=“字符串”;
回声
“索引-2处的字符是$string($string)[-2].",PHP_终止;
$string($string)[-] =“o”;
回声
“将索引-3处的字符更改为o表示$string($string).",PHP_终止;
?>

上述示例将输出:

索引-2处的字符为n。将索引-3处的字符更改为o会产生很强的效果。

对于更复杂的情况先进的必须使用语法。

高级(卷曲)语法

高级语法允许插入变量使用任意访问器。

任何标量变量、数组元素或对象属性(静止的是否)使用一串可以通过此语法包含表示。表达式的编写方式与它在一串,然后将其包裹{}.自{无法逃脱,这只有当$立即遵循{.使用{\$以获得字面意义的{$.一些例子说明:

示例#19 Curly语法

<?php
常数数据_键='常量键';
$很棒=“太棒了”;
$arr(美元)= [
'1',
'2',
'3',
[
41,42,43],
“密钥”=>'索引值',
'常量键'=>'带减号的键',
“foo”(foo)=> [“foo1”,“foo2”,“foo3”]
];

//无法工作,输出:这太棒了
回声“这是{$很棒}";

//作品、成果:太棒了
回声“这是{$很棒}";

方形{
公众的
$宽度;

公共职能
__构造(int$宽度) {$这个->宽度=$宽度; }
}

$平方=新方形(5);

//工程
回声“这个方块是{$平方->宽度}00厘米宽。";


//有效,带引号的键只能使用花括号语法
回声“这起作用:{$arr(美元)[“密钥”]}";


//工程
回声“这起作用:{$arr(美元)[][2]}";

回声
“这起作用:{$arr(美元)[数据_键]}";

//使用多维数组时,始终在数组周围使用大括号
//当在字符串内部时
回声“这起作用:{$arr(美元)[“foo”][2]}";

回声
“这起作用:{$对象->[]->名称}";

回声
“这起作用:{$对象->$静态属性}";

//无法工作,输出:C:\directory\{monastic}.txt
回声“C:\目录\{$很棒}.txt“;

//工作,输出:C:\directory\familtic.txt
回声“C:\\目录\\{$很棒}.txt“;
?>

注释:由于此语法允许使用任意表达式,因此可以使用可变变量在高级语法中。

字符串访问和字符修改

中的字符一串s可以由访问和修改指定所需字符在一串使用正方形阵列括号,如$str[42].想想一串作为阵列用于此目的的字符数。功能substr()substr_replace()当要提取或替换多个字符时,可以使用。

注释:从PHP7.1.0开始,还支持负字符串偏移量。这些规定距字符串末尾的偏移量。以前,发射的负偏移E_通知用于阅读(生成空字符串)和E_警告用于写作(不动绳子)。

注释:在PHP 8.0.0之前,一串也可以使用大括号访问s,如$str{42}出于同样的目的。从PHP 7.4.0开始,此花括号语法已被弃用,从PHP 8.0.0开始不再受支持。

警告

写入超出范围的偏移量会用空格填充字符串。非整数类型转换为整数。非法偏移类型发出E_警告.只使用指定字符串的第一个字符。从PHP 7.1.0开始,分配一个空字符串会引发一个致命的错误。从前,它分配了一个空字节。

警告

在内部,PHP字符串是字节数组。因此,访问或使用数组括号修改字符串不是多字节安全的,并且只能对以下单字节编码的字符串执行此操作按照ISO-8859-1。

注释:从PHP7.1.0开始,对空字符串应用空索引操作符会引发致命错误错误。以前,空字符串被静默转换为数组。

示例20一些字符串示例

<?php
//获取字符串的第一个字符
$str(美元)=“这是一个测试。”;
$优先=$str(美元)[0];
变量转储(美元优先);

//获取字符串的第三个字符
三分之一美元=$str(美元)[2];
变量转储(三分之一美元);

//获取字符串的最后一个字符。
$str(美元)=“这仍然是一个测试。”;
上次$=$str(美元)[斯特伦($str(美元))-1];
变量转储(上次$);

//修改字符串的最后一个字符
$str(美元)=“看看大海”;
美元str[斯特伦($str(美元))-1] =“e”;
变量转储($str(美元));
?>

字符串偏移量必须是整数或类整数字符串,否则将引发警告。

示例21非法字符串偏移示例

<?php
$str(美元)
=“abc”;

$个密钥= ['1','1.0',“x”,“1x”];

前臂(
$个密钥作为$keyToTry($keyTo尝试)) {
变量转储(发行($str(美元)[$keyToTry($keyTo尝试)]));

尝试{
变量转储($str(美元)[$keyToTry($keyTo尝试)]);
}捕捉(
类型错误$e) {
回声
美元->获取消息(),PHP_终止;
}

回声
PHP_终止;
}
?>

上述示例将输出:

布尔(true)字符串(1)“b”布尔(假)无法访问字符串上字符串类型的偏移量布尔(假)无法访问字符串上字符串类型的偏移量布尔(假)警告:第10行标准输入代码中的字符串偏移量“1x”非法字符串(1)“b”

注释:

访问其他类型的变量(不包括数组或对象实现适当的接口)使用[]{}默默地返回无效的.

注释:

可以访问字符串文字中的字符使用[]{}.

注释:

使用{}PHP 7.4中的语法已被弃用。PHP 8.0中已删除此项。

有用的函数和运算符

字符串s可以使用'连接。'(点)运算符。注释“+”(加法)运算符将为此努力。请参见字符串运算符对于更多信息。

有许多有用的函数用于一串操纵。

请参阅字符串函数部分对于一般功能,以及Perl-compatible正则表达式函数用于高级查找和替换功能。

还有URL字符串的函数、和用于加密/解密字符串的函数(搞砸).

最后,请参见字符类型功能.

正在转换为字符串

值可以转换为一串使用(字符串)演员或strval()功能。字符串转换在表达式,其中一串需要。使用回声打印函数,或当变量与一串。上的章节类型类型Juggling将使以下更清楚。另请参见设置类型()功能。

A类布尔 真的值转换为一串 "1".布尔 已转换为""(空字符串)。这允许转换回和第四方布尔一串值。

整数浮动转换为一串以文本形式表示数字(包括指数部分浮动s) ●●●●。浮点数可以是使用指数表示法转换(4.1东经+6).

注释:

从PHP 8.0.0开始,小数点字符始终为一个句点(“.“)。在PHP 8.0.0之前,小数点字符在脚本的语言环境中定义(类别LC_NUMERIC)。请参阅setlocale()功能。

阵列s始终转换为一串 “数组”;正因为如此,回声打印不能自己显示阵列。要查看单个图元,请使用诸如echo$arr['foo']。有关查看整个内容。

为了转换对象s至一串,魔法方法__toString(字符串)必须使用。

资源s始终转换为一串s和结构“资源id#1”,其中1是分配给资源由PHP在运行时。虽然不应依赖此字符串的确切结构并且会发生更改,对于给定的资源,它将始终是唯一的在执行脚本的生命周期内(即Web请求或CLI过程),并且不会被重复使用。要获得资源的类型,使用这个获取资源类型()功能。

无效的始终转换为空字符串。

如上所述,直接转换阵列,对象,或资源一串不提供有关超出其类型的值的任何有用信息。请参阅功能打印_()var_dump()对于更有效地检查这些类型的内容。

大多数PHP值也可以转换为一串s表示永久存储。此方法称为序列化,由序列化()功能。

字符串类型的详细信息

这个一串在PHP中实现为字节数组和指示缓冲区长度的整数。它没有关于如何这些字节转换为字符,将任务留给程序员。字符串可以包含的值没有限制;英寸特定的,带值的字节0允许使用(“NUL字节”)字符串中的任何位置(但是,本手册中提到的一些函数“二进制安全”,可以将字符串交给忽略数据的库在NUL字节之后。)

字符串类型的这种性质解释了为什么没有单独的“字节”类型在PHP中,字符串扮演这个角色。不返回文本数据的函数–for实例,从网络套接字读取的任意数据仍将返回串。

考虑到PHP没有规定字符串的特定编码,可以想知道字符串文字是如何编码的。例如,是字符串"á"相当于“\xE1”(ISO-8859-1),“\xC3\xA1”(UTF-8,C格式),“\x61\xCC\x81”(UTF-8,D格式)或任何其他可能的代表性?答案是字符串将以任何方式编码它在脚本文件中编码。因此,如果脚本是用ISO-8859-1,字符串将在ISO-8859-1中编码,依此类推。但是,如果启用了Zend Multibyte,则这不适用;在这种情况下,脚本可以用任意编码(显式声明或检测到),然后转换为特定的内部编码,然后将用于字符串文字的编码。请注意,脚本的编码(或内部编码,如果启用Zend Multibyte)–这几乎总是表示此编码应该是ASCII的兼容超集,例如UTF-8或ISO-8859-1。然而,请注意,状态相关编码在初始和非初始移位状态中可以使用相同的字节值可能会有问题。

当然,为了有用,对文本进行操作的函数可能必须假设字符串是如何编码的。不幸的是,这里在PHP的函数中,这一点有很大变化:

  • 一些函数假设字符串是以某种(任何)单字节编码的编码,但不需要将这些字节解释为特定的字符。例如,这是一个案例,substr(),strpos(),strlen()strcmp()。思考这些函数的另一种方式是操作内存缓冲区,即它们处理字节和字节偏移。
  • 其他函数传递字符串的编码,可能它们如果没有给出此类信息,则假定为默认值。这是一个案例htm实体()和大多数中的函数mbstring(mbstring)扩展。
  • 其他人使用当前语言环境(请参见setlocale()),但是逐字节操作。
  • 最后,他们可能只是假设字符串使用特定编码,通常为UTF-8。这是中大多数函数的情况国际扩展和中PCRE公司延伸(在最后一种情况下,只有当u个使用修饰符)。

最终,这意味着使用Unicode编写正确的程序取决于小心避免不起作用且最有可能起作用的功能破坏数据并使用行为正确的函数,通常来自国际mbstring(mbstring)扩展名。然而,使用可以处理Unicode编码的函数只是开始。无论语言提供什么功能,都必须了解Unicode规范。例如,假设存在只有大写和小写才是错误的假设。

添加备注

用户贡献的笔记11条注释

gmail dot com上的gtisza
13年前
文档中没有提到,但heredoc末尾的结束分号实际上被解释为真正的分号,因此,有时会导致语法错误。

这项工作:

<?php
$foo美元
=<<<结束
美国广播公司
结束;
?>

这不会:

<?php
foo公司
(<<<结束
美国广播公司
结束;
);
//语法错误,意外的“;”
?>

如果没有分号,则工作正常:

<?php
foo公司
(<<<结束
美国广播公司
结束
);
?>
巴赫曼MD
2年前
在PHP 8.2中,不推荐在字符串中使用${var},请改用{$var}:

<?php
$果汁
=“苹果”;

//有效。通过将变量名括在大括号中,显式指定变量名的末尾:
回声“他喝了一些由{$果汁}s.“;
?>
莱龙网的莱龙
20年前
您可以使用复杂语法将对象属性和对象方法的值放在字符串中。例如。..
<?php
测试{
公众的
一美元=1;
公共职能
() {
返回
2;
}
}
$测试=新测试();
回声
“foo{$测试->}酒吧{$测试->()}";
?>
将输出“foo 1 bar 2”。

但是,您不能对命名空间中的所有值都这样做。类常量和静态属性/方法将不起作用,因为复杂语法会查找“$”。
<?php
测试{
常数
一个=1;
}
回声
“foo{Test::ONE}栏”;
?>
这将输出“foo{Test::one}bar”。常量和静态属性要求您分解字符串。
雷。Paseur有时使用Gmail
6年前
md5('240610708')==md5(‘QNKCDZO')

这种比较是正确的,因为md5()散列都以“0e”开头,所以PHP类型杂耍将这些字符串理解为科学符号。根据定义,任何幂次的零都是零。
og at gams点at
18年前
使用heredoc格式常数的简单透明解决方案:
定义(“测试”、“测试字符串”);

$const=获取_defined_constants();

回波<<<结束
{$const[“测试”]}
结束;

结果:
测试字符串
gmail网站上的绿蓝月光
4年前
<?php
\\示例#10简单语法-最后一行“echo”的解决方案。

{
公众的
$约翰=“约翰·史密斯”;
公众的
$简=“简·史密斯”;
公众的
$罗伯特=“罗伯特·鲍尔森”;

公众的
$史密斯=“史密斯”;
}

$人=新();

回声
"$人->厕所然后向问好$人->.".PHP_终止;
回声
"$人->厕所的妻子打招呼$人->罗伯特.".PHP_终止;
回声
"$人->罗伯特向这两个人打招呼$人->史密斯";
\
\赢得不起作用
\\输出:罗伯特·保尔森向两人致意

/**解决方案:**\

echo“$people->robert问候了两个$people->smith\x08s”;

\\会有用的
\\输出:罗伯特·鲍尔森向两位史密斯夫妇致意

?>
chejz dot com的atnak
21年前
下面是一个可能与通过字符串末尾以外的字符访问字符串的奇怪性有关的问题:

$string=“a”;

var_dump($string[2]);//string(0)“”
var_dump($string[7]);//string(0)“”
$string[7]===“”;//正确

似乎任何超过字符串末尾的内容都会给出一个空字符串。。然而,当E_NOTICE打开时,上述示例将抛出消息:

注意:行line上FILE中未初始化的字符串偏移量:N

无法使用@$string[7]专门屏蔽此消息,因为$string本身未设置时可能会出现这种情况。

isset($string[7]);//错误
$string[7]===空;//错误

尽管它看起来像是字符串类型的not-NULL值,但它仍然被认为是未设置的。
richardneill dot org的php
12年前
字符串中的前导零(至少令人惊讶)不被视为八进制。
考虑:
$x=“0123”+0;
美元=0123+0;
echo“x是$x,y是$y”;//打印“x是123,y是83”
换句话说:
*源代码中数字文字中的前导零被解释为“八进制”,c.f.strtol()。
*字符串(例如用户提交的数据)中的前导零,在将(隐式或显式)转换为整数时被忽略,并被视为十进制,即c.f.strtod()。
史蒂夫在mrclay-dot org
16年前
创建人工可读转义双引号字符串的简单函数,用于源代码或使用换行符/tabs/等调试字符串。

<?php
功能双引号($str(美元)) {
$ret(美元)='"';
的(
1美元=0,1美元=斯特伦($str(美元));1美元<1美元; ++1美元) {
0美元=($str(美元)[1美元]);
如果(
0美元<31||0美元>126) {
交换机(
0美元) {
案例
9:$ret(美元).=“\t”;中断;
案例
10:$ret(美元).=“\n”;中断;
案例
11:$ret(美元).=“\v”;中断;
案例
12:$ret(美元).=“\f”;中断;
案例
13:$ret(美元).=“\r”;中断;
违约:
$ret(美元).=“\x”.字符串pad(十进制(美元),2,'0',STR_PAD_左侧);
}
}其他{
交换机(
0美元) {
案例
36:$ret(美元).='\$';中断;
案例
34:$ret(美元).='\"';中断;
案例
92:$ret(美元).='\\\\';中断;
违约:
$ret(美元).=$str(美元)[1美元];
}
}
}
返回
$ret(美元).'"';
}
?>
如果点u点需要,则在findme点处的chAlx
16年前
为了省心,请不要阅读之前关于日期的评论;)

当两个字符串都可以转换为数字时(在(“$a”>“$b”)测试中),则使用结果数字,否则将逐个字符比较FULL字符串:

<?php
变量泵
('1.22'>'01.23');//布尔(假)
变量转储('1.22.00'>'01.23.00');//布尔(true)
变量转储('1-22-00'>'01-23-00');//布尔(true)
变量转储((浮动)'1.22.00'>(浮动)'01.23.00');//布尔(假)
?>
海登在karelia dot ru
16年前
下面是一个简单的技巧,允许双引号字符串和heredocs在花括号语法中包含任意表达式,包括常量和其他函数调用:

<?php

//黑客声明
功能_快递($v(美元)){返回$v(美元); }
导出(_E)='导出(_E)';

//我们的操场
定义(“qwe”,“asd”);
定义(“zxc”,5);

美元=;
十亿美元=4;

功能
c(c)(美元,十亿美元){返回美元+十亿美元; }

//用法
回声“前{导出(_E)(1+2)}发布\n“;//输出“前3后”
回声“前{导出(_E)(量子阱)}发布\n“;//输出“pre-asd-post”
回声“前{导出(_E)(c(c)(美元,十亿美元)+zxc公司*2)}发布\n“;//输出“pre-17 post”

//一般语法是{$_expr(…)}
?>
到顶部