参考-这个符号在PHP中意味着什么?

这是什么?

这是一个关于PHP语法时不时出现的问题的集合。这也是一个社区Wiki,因此邀请每个人参与维护此列表。

这是为什么?

过去很难找到有关运算符和其他语法标记的问题。主要思想是链接到Stack Overflow上的现有问题,因此我们更容易引用它们,而不是复制PHP手册中的内容。

注意:自2013年1月以来,Stack Overflow不支持特殊字符。只需用引号包围搜索词,例如#0

我该在这里做什么?

如果因为你问了这样的问题而被某人指出在这里,请在下面找到特定的语法。php手册的链接页面以及链接的问题可能会回答你的问题。如果是这样,我们鼓励你给答案投赞成票。此列表并不意味着替代他人提供的帮助。

该名单

如果您的特定令牌未在下面列出,您可能会在解析器令牌列表中找到它。


&位运算符参考文献


=&参考文献


&=位运算符


&&逻辑运算符


%算术运算符


!!逻辑运算符


@差错控制操作符


?:三元算子


??空合并运算符(PHP 7起)


?string?int?array?bool?float可为空的返回类型声明(从PHP 7.1开始)


:控制结构的替代语法三元算子退货类型声明


::范围解析操作符


\命名空间


->类和对象


=>数组


^位运算符


>>位运算符


<<位运算符


<<<赫雷多克或诺多克


=赋值运算符


==比较运算符


===比较运算符


!==比较运算符


!=比较运算符


<>比较运算符


<=>比较运算符(自PHP 7.0起)


|位运算符


||逻辑运算符


~位运算符


+算术运算符数组运算符


+=-=赋值运算符


++--递增/递减运算符


.=赋值运算符


.字符串运算符


,函数参数

,变量声明


$$变量变量


`执行操作符


<?=短开放标签


[]数组(PHP 5.4以来的短语法)


<?打开和关闭标签


..双点字符范围


...参数拆解(自PHP 5.6起)


**指数(自PHP 5.6起)


#一行shell样式注释


?->NullSafe操作员调用(自PHP 8.0起)


799320 次浏览

递增/递减运算符

++递增运算符

--递减运算符

Example    Name              Effect---------------------------------------------------------------------++$a       Pre-increment     Increments $a by one, then returns $a.$a++       Post-increment    Returns $a, then increments $a by one.--$a       Pre-decrement     Decrements $a by one, then returns $a.$a--       Post-decrement    Returns $a, then decrements $a by one.

这些可以在变量之前或之后。

如果put在变量之前,对变量第一执行增量/减量操作,则返回结果。如果put在变量之后,返回变量第一,则完成增量/减量操作。

例如:

$apples = 10;for ($i = 0; $i < 10; ++$i) {echo 'I have ' . $apples-- . " apples. I just ate one.\n";}

实时示例

在上面的情况下,使用++$i,因为它更快。$i++将具有相同的结果。

前增量有点快,因为它确实增加了变量,然后“返回”结果。后增量创建一个特殊变量,在那里复制第一个变量的值,只有在使用第一个变量后,才将其值替换为第二个变量。

但是,您必须使用$apples--,因为首先,您想显示当前的苹果数量,而然后您想从中减去一个。

您还可以在PHP中增加字母:

$i = "a";while ($i < "c") {echo $i++;}

一旦达到zaa就是下一个,依此类推。

请注意,字符变量可以递增,但不能递减,即使如此,也只支持纯ASCII字符(a-z和A-Z)。


堆栈溢出帖子:

语法名称描述
x == y相等true如果x和y有相同的键/值对
x != y不等式true如果x不等于y
x === y标识true如果x和y有相同的键/值对
在相同的顺序和相同的类型
x !== y非标识true如果x不等于y
x <=> y宇宙飞船0如果x等于y,大于0如果x>y,小于0如果x
++x预增量将x递增一,然后返回x
x++增量后返回x,然后将x递增1
--x预减量将x减一,然后返回x
x--后减量返回x,然后将x递减一
x and y如果x和y都是true,则为true。如果x=6,y=3,则
(x < 10 and y > 1)返回true
x && y如果x和y都是true,则为true。如果x=6,y=3,则
(x < 10 && y > 1)返回true
x or y或者如果x或y中的任何一个为true,则为true。如果x=6,y=3,则
(x < 10 or y > 10)返回true
x || y或者如果x或y中的任何一个为true,则为true。如果x=6,y=3,则
(x < 3 || y > 1)返回true
a . b连接连接两个字符串:"嗨"."哈"

位运算符

什么是位?位是1或0的表示。基本上是OFF(0)和ON(1)

什么是字节?一个字节由8位组成,一个字节的最高值是255,这意味着每一位都被设置了。我们将看看为什么一个字节的最大值是255。

-------------------------------------------|      1 Byte ( 8 bits )                  |-------------------------------------------|Place Value | 128| 64| 32| 16| 8| 4| 2| 1|-------------------------------------------

1字节的这种表示

1+2+4+8+16+32+64+128=255(1字节)

举几个例子,以便更好地理解

“AND”运算符:&

$a =  9;$b = 10;echo $a & $b;

这将输出数字8。为什么?让我们看看我们的表格示例。

-------------------------------------------|      1 Byte ( 8 bits )                  |-------------------------------------------|Place Value | 128| 64| 32| 16| 8| 4| 2| 1|-------------------------------------------|      $a    |   0|  0|  0|  0| 1| 0| 0| 1|-------------------------------------------|      $b    |   0|  0|  0|  0| 1| 0| 1| 0|-------------------------------------------|      &     |   0|  0|  0|  0| 1| 0| 0| 0|-------------------------------------------

所以你可以从表中看到它们唯一共享的位是8位。

第二个例子

$a =  36;$b = 103;echo $a & $b; // This would output the number 36.$a = 00100100$b = 01100111

两个共享位是32和4,当它们加在一起时返回36。

“或”运算符:|

$a =  9;$b = 10;echo $a | $b;

这将输出数字11。为什么?

-------------------------------------------|      1 Byte ( 8 bits )                  |-------------------------------------------|Place Value | 128| 64| 32| 16| 8| 4| 2| 1|-------------------------------------------|      $a    |   0|  0|  0|  0| 1| 0| 0| 1|-------------------------------------------|      $b    |   0|  0|  0|  0| 1| 0| 1| 0|-------------------------------------------|      |     |   0|  0|  0|  0| 1| 0| 1| 1|-------------------------------------------

您会注意到我们在8、2和1列中设置了3位。将它们加起来:8+2+1=11。

_gettext()的别名

_()中的下划线字符_是#1函数的别名。

魔术常量:虽然这些不仅仅是符号,也是这个令牌家族的重要组成部分。有八个神奇的常量会根据它们的使用地点而变化。

__LINE__:文件的当前行号。

__FILE__:文件的完整路径和文件名。如果在包含中使用,则返回包含文件的名称。从PHP 4.0.2开始,__FILE__始终包含符号链接解析的绝对路径,而在旧版本中,它在某些情况下包含相对路径。

__DIR__:文件的目录。如果在包含文件中使用,则返回包含文件的目录。这相当于dirname(__FILE__)。此目录名没有尾部斜杠,除非它是根目录。(在PHP 5.3.0中添加。)

__FUNCTION__:函数名。(在PHP 4.3.0中添加)从PHP 5开始,此常量返回声明的函数名(区分大小写)。在PHP 4中,它的值始终是小写的。

__CLASS__:类名。(在PHP 4.3.0中添加)从PHP 5开始,这个常量返回声明的类名(区分大小写)。在PHP 4中,它的值总是小写的。类名包括它在其中声明的命名空间(例如Foo\Bar)。请注意,从PHP 5.4开始,__CLASS__也适用于特征。在trait方法中使用时,__CLASS__是使用trait的类名。

__TRAIT__:trait名称。(在PHP 5.4.0中添加)从PHP 5.4开始,此常量返回声明的trait(区分大小写)。trait名称包括声明它的命名空间(例如Foo\Bar)。

__METHOD__:类方法名。(在PHP 5.0.0中添加)方法名在声明时返回(区分大小写)。

__NAMESPACE__:当前命名空间的名称(区分大小写)。此常量在编译时定义(在PHP 5.3.0中添加)。

来源

类型运算符

instanceof用于确定PHP变量是否是某个类的实例化对象。

<?phpclass mclass { }class sclass { }$a = new mclass;var_dump($a instanceof mclass);var_dump($a instanceof sclass);

上面的示例将输出:

bool(true)bool(false)

理由:上面的示例$amclass的对象,因此仅使用mclass数据而不是sclass的实例

继承的例子

<?phpclass pclass { }class childclass extends pclass { }$a = new childclass;var_dump($a instanceof childclass);var_dump($a instanceof pclass);

上面的示例将输出:

bool(true)bool(true)

克隆的例子

<?phpclass cloneable { }$a = new cloneable;$b = clone $a;var_dump($a instanceof cloneable);var_dump($b instanceof cloneable);

上面的示例将输出:

bool(true)bool(true)

<=>宇宙飞船操作员

在PHP 7中添加

宇宙飞船操作员<=>是PHP 7中添加的最新比较运算符。它是一个非结合二进制运算符,与相等运算符(==!====!==)具有相同的优先级。此运算符允许在左侧和右侧操作数之间进行更简单的三向比较。

运算符会产生一个整数表达式:

  • 0当两个操作数相等时
  • 当左操作数小于右操作数时,小于0
  • 当左操作数大于右操作数时,大于0

e. g.

1 <=> 1; // 01 <=> 2; // -12 <=> 1; // 1

使用此运算符的一个很好的实际应用是在比较类型回调中,这些回调预计将根据两个值之间的三向比较返回零、负或正整数。传递给#0的比较函数就是这样一个例子。

在PHP 7之前,你会写…

$arr = [4,2,1,3];
usort($arr, function ($a, $b) {if ($a < $b) {return -1;} elseif ($a > $b) {return 1;} else {return 0;}});

从PHP 7开始,您可以编写…

$arr = [4,2,1,3];
usort($arr, function ($a, $b) {return $a <=> $b;// return $b <=> $a; // for reversing order});

宇宙飞船操作员#0(在PHP 7中添加)

<=>宇宙飞船操作符示例(PHP 7,来源:PHP手册):

整数、浮点数、字符串、数组和用于变量三向比较的对象。

// Integersecho 10 <=> 10; // 0echo 10 <=> 20; // -1echo 20 <=> 10; // 1
// Floatsecho 1.5 <=> 1.5; // 0echo 1.5 <=> 2.5; // -1echo 2.5 <=> 1.5; // 1
// Stringsecho "a" <=> "a"; // 0echo "a" <=> "b"; // -1echo "b" <=> "a"; // 1// Comparison is case-sensitiveecho "B" <=> "a"; // -1
echo "a" <=> "aa"; // -1echo "zz" <=> "aa"; // 1
// Arraysecho [] <=> []; // 0echo [1, 2, 3] <=> [1, 2, 3]; // 0echo [1, 2, 3] <=> []; // 1echo [1, 2, 3] <=> [1, 2, 1]; // 1echo [1, 2, 3] <=> [1, 2, 4]; // -1
// Objects$a = (object) ["a" => "b"];$b = (object) ["a" => "b"];echo $a <=> $b; // 0
$a = (object) ["a" => "b"];$b = (object) ["a" => "c"];echo $a <=> $b; // -1
$a = (object) ["a" => "c"];$b = (object) ["a" => "b"];echo $a <=> $b; // 1
// only values are compared$a = (object) ["a" => "b"];$b = (object) ["b" => "b"];echo $a <=> $b; // 1

{}大括号

关于上一篇文章的一些话

$x[4] = 'd'; // it works$x{4} = 'd'; // it works
$echo $x[4]; // it works$echo $x{4}; // it works
$x[] = 'e'; // it works$x{} = 'e'; // does not work
$x = [1, 2]; // it works$x = {1, 2}; // does not work
echo "${x[4]}"; // it worksecho "${x{4}}"; // does not work
echo "{$x[4]}"; // it worksecho "{$x{4}}"; // it works

PHP字符串:PHP字符串可以通过四种方式指定,而不仅仅是两种方式:

1)单引号字符串:

$string = 'This is my string'; // print This is my string

2)双引号字符串:

$str = 'string';
$string = "This is my $str"; // print This is my string

3)Heredoc:

$string = <<<EODThis is my stringEOD; // print This is my string

4)Notdoc(自PHP 5.3.0起):

$string = <<<'END_OF_STRING'This is my stringEND_OF_STRING; // print This is my string

PHP中的运算符的概述:


逻辑运算符:

  • $a&&$b: TRUE如果$a和$b都是TRUE。
  • $a||$b: TRUE如果$a或$b为TRUE。
  • $a xor$b: TRUE如果$a或$b为TRUE,但不是两者都为TRUE。
  • !$a: TRUE如果$a不是TRUE。
  • $a和$b: TRUE如果$a和$b都是TRUE。
  • $a或$b: TRUE如果$a或$b为TRUE。

比较运算符:

  • $a==$b: TRUE如果$a在类型杂耍后等于$b。
  • $a==$b: TRUE如果$a等于$b,并且它们的类型相同。
  • $a!=$b: TRUE如果类型杂耍后$a不等于$b。
  • $a<>$b: TRUE如果类型杂耍后$a不等于$b。
  • $a ! == $b:如果$a不等于$b,或者它们不属于同一类型,则为TRUE。
  • $a<$b:如果$a严格小于$b,则为TRUE。
  • $a>$b:如果$a严格大于$b,则为TRUE。
  • $a<=$b:如果$a小于或等于$b,则为TRUE。
  • $a>=$b:如果$a大于或等于$b,则为TRUE。
  • $a<=>$b:当$a分别小于、等于或大于$b时,小于、等于或大于零的整数。从PHP 7开始可用。
  • $a?$b:$c:如果$a返回$b,则返回$c(三元运算符
  • $a??$c:与$a相同?$a:$c(空合并运算符-需要PHP>=7)

算术运算符:

  • -$a:$a的反面。
  • $a+$b:$a和$b之和。
  • $a-$b:$a和$b的区别。
  • $a*$b:$a和$b的乘积。
  • $a/$b:$a和$b的商。
  • $a%$b:$a的余数除以$b。
  • $a**$b:将$a提升到$b'th幂的结果(在PHP 5.6中引入)

递增/递减运算符:

  • ++$a:将$a递增1,然后返回$a。
  • $a++:返回$a,然后将$a递增1。
  • --$a:递减$a,然后返回$a。
  • $a--:返回$a,然后将$a递减1。

按位运算符:

  • $a&$b:设置在$a和$b中的位。
  • $a|$b:设置在$a或$b中的位被设置。
  • $a^$b:设置在$a或$b中但不同时设置的位。
  • ~$a:在$a中设置的位未设置,反之亦然。
  • $a<<$b:将$a$b的位向左移动(每一步意味着“乘以2”)
  • $a>>$b:将$a$b的位向右移动(每一步意味着“除以2”)

字符串运算符:

  • $a.$b:$a和$b的连接。

数组运算符:

  • $a+$b:$a和$b的联合。
  • $a==$b:如果$a和$b具有相同的键/值对,则为TRUE。
  • $a==$b:如果$a和$b具有相同顺序和相同类型的相同键/值对,则为TRUE。
  • $a!=$b:如果$a不等于$b,则为TRUE。
  • $a<>$b:如果$a不等于$b,则为TRUE。
  • $a ! == $b:如果$a不等于$b,则为TRUE。

赋值运算符:

  • $a=$b:$b的值分配给$a
  • $a+=$b:与$a=$a+$b相同
  • $a-=$b:与$a=$a-$b相同
  • *$a=$b:与$a=$a*$b相同
  • $a/=$b:与$a=$a/$b相同
  • $a%=$b:与$a=$a%$b相同
  • **$a=$b:与$a=$a**$b相同
  • $a.=$b:与$a=$a.$b相同
  • $a&=$b:与$a=$a&$b相同
  • $a|=$b:与$a=$a|$b相同
  • $a^=$b:与$a=$a^$b相同
  • $a<<=$b:与$a=$a<<$b相同
  • $a>>=$b:与$a=$a>>$b相同
  • $a??=$b:如果$a为空或未定义,则将$b的值分配给$a(null合并赋值操作符-需要PHP>=7.4)

说明

and操作符和or操作符的优先级低于赋值操作符=

这意味着$a = true and false;等于($a = true) and false

在大多数情况下,您可能希望使用#0#1,它们的行为方式从C,Java或JavaScript等语言中已知。

问题:

=>是什么意思


答案:

=>是我们人类决定用来分离关联数组中"Key" => "Value"对的符号。

拟订:

为了理解这一点,我们必须知道什么是关联数组。当传统程序员想到数组(在php)时,首先出现的是类似于:

$myArray1 = array(2016, "hello", 33);//option 1
$myArray2 = [2016, "hello", 33];//option 2
$myArray3 = [];//option 3$myArray3[] = 2016;$myArray3[] = "hello";$myArray3[] = 33;

如果我们想在代码的后面部分调用数组,我们可以这样做:

echo $myArray1[1];// output: helloecho $myArray2[1];// output: helloecho $myArray3[1];// output: hello

到目前为止一切顺利。然而,作为人类,我们可能会发现很难记住数组的索引[0] 2016的值,数组的索引[1]问候,数组的索引[2]是简单的整数值。我们的替代方案是使用所谓的关联数组。关联数组与序列数组有一些区别这就是前面的情况,因为它们增加了预定序列中使用的索引,每个后续值增加1).

差异(序列数组和关联数组之间):

  • 在声明关联数组时,您不仅包含要放入数组的value,还将要在调用数组时使用的索引值(称为key)放在代码的后面部分。声明期间使用以下语法:"key" => "value"

  • 当使用关联数组时,key值将被放置在数组的索引中以检索所需的value

例如:

$myArray1 = array("Year" => 2016,"Greetings" => "hello","Integer_value" => 33);//option 1
$myArray2 = ["Year" =>  2016,"Greetings" => "hello","Integer_value" => 33];//option 2
$myArray3 = [];//option 3$myArray3["Year"] = 2016;$myArray3["Greetings"] = "hello";$myArray3["Integer_value"] = 33;

现在,要接收与以前相同的输出,将在数组索引中使用key值:

echo $myArray1["Greetings"];// output: helloecho $myArray2["Greetings"];// output: helloecho $myArray3["Greetings"];// output: hello

最后一点:

因此,从上面的例子中,很容易看出=>符号用于表达数组期间keyvalue对之间的关联数组关系,即数组内值的初始化。

零合并运算符(??)

此运算符已在PHP 7.0中添加,用于需要与isset()结合使用三元运算符的常见情况。如果它存在且不是NULL,它将返回其第一个操作数;否则它将返回其第二个操作数。

<?php// Fetches the value of $_GET['user'] and returns 'nobody'// if it does not exist.$username = $_GET['user'] ?? 'nobody';// This is equivalent to:$username = isset($_GET['user']) ? $_GET['user'] : 'nobody';
// Coalescing can be chained: this will return the first// defined value out of $_GET['user'], $_POST['user'], and// 'nobody'.$username = $_GET['user'] ?? $_POST['user'] ?? 'nobody';?>

问题

PHP中的“&”是什么意思?

PHP“&”运算符

一旦我们习惯了,生活就会变得更容易…(仔细检查下面的例子)

&通常检查设置在$a和$b中的位。

你有没有注意到这些电话是如何工作的?

   error_reporting(E_ERROR | E_WARNING | E_PARSE);error_reporting(E_ERROR | E_WARNING | E_PARSE | E_NOTICE);error_reporting(E_ALL & ~E_NOTICE);error_reporting(E_ALL);

所以后面所有上述是按位运算符和位的游戏。

其中一个有用的例子是像下面这样的简单配置,因此单个整数字段可以为您存储数千个组合。

大多数人已经阅读了文档,但没有重新了解这些按位运算符的实际用例。

你会喜欢的例子

<?php
class Config {
// our constants must be 1,2,4,8,16,32,64 ....so onconst TYPE_CAT=1;const TYPE_DOG=2;const TYPE_LION=4;const TYPE_RAT=8;const TYPE_BIRD=16;const TYPE_ALL=31;
private $config;
public function __construct($config){$this->config=$config;
if($this->is(Config::TYPE_CAT)){echo 'cat ';}if($this->is(Config::TYPE_DOG)){echo 'dog ';}if($this->is(Config::TYPE_RAT)){echo 'rat ';}if($this->is(Config::TYPE_LION)){echo 'lion ';}if($this->is(Config::TYPE_BIRD)){echo 'bird ';}echo "\n";}
private function is($value){return $this->config & $value;}}
new Config(Config::TYPE_ALL);// cat dog rat lion birdnew Config(Config::TYPE_BIRD);//birdnew Config(Config::TYPE_BIRD | Config::TYPE_DOG);//dog birdnew Config(Config::TYPE_ALL & ~Config::TYPE_DOG & ~Config::TYPE_CAT);//rat lion bird

==用于检查相等性没有考虑变量数据类型

===用于检查两者变量数据类型的相等性

示例

$a = 5

  1. if ($a == 5)-将评估为true

  2. if ($a == '5')-将评估为true,因为在比较这两个值时,PHP会在内部将该字符串值转换为整数,然后比较两个值

  3. if ($a === 5)-将评估为true

  4. if ($a === '5')-将计算为false,因为值是5,但此值5不是整数。

空Coalesce运算符“??”(在PHP 7中添加)

对于运算符来说,这不是一个最吸引人的名字,但是PHP 7带来了相当方便的null合并,所以我想分享一个例子。

在PHP 5中,我们已经有了一个三元运算符,它测试一个值,如果返回true,则返回第二个元素,如果不返回true,则返回第三个元素:

echo $count ? $count : 10; // outputs 10

还有一个速记,如果第二个元素与第一个元素相同,则允许您跳过第二个元素:echo$count?: 10;//也输出10

在PHP 7中,我们还获得了??运算符,它不是表示极度混乱,这是我通常将两个问号一起使用的方式,而是允许我们将一串值链接在一起。从左到右读取,存在且不为空的第一个值是将返回的值。

// $a is not set$b = 16;
echo $a ?? 2; // outputs 2echo $a ?? $b ?? 7; // outputs 16

此构造对于为来自用户输入或现有配置的一个或多个值提供优先级很有用,并且如果缺少该配置,则可以安全地返回给定的默认值。这是一个很小的功能,但我知道一旦我的应用程序升级到PHP 7,我就会使用它。

可为空的返回类型声明

PHP 7增加了对返回类型声明的支持。与参数类型声明类似,返回类型声明指定将从函数返回的值的类型。返回类型声明可用于参数类型声明的类型相同。

严格类型也会对返回类型声明产生影响。在默认的弱模式下,如果返回值还不是正确的类型,则返回值将被强制转换为该类型。在强模式下,返回值必须是正确的类型,否则将抛出TypeError。

从PHP 7.1.0开始,可以通过在类型名称前加上问号(?)将返回值标记为可为空。这表示该函数返回指定的类型或NULL。

<?phpfunction get_item(): ?string {if (isset($_GET['item'])) {return $_GET['item'];} else {return null;}}?>

来源

三个DOTS作为Splat运算符(…)(自PHP 5.6起)

PHP有一个运算符“…”(三个点),称为Splat运算符。它用于在函数中传递任意数量的参数,这种类型的函数称为可变函数。让我们举个例子来使用“…”(三个点)。

示例1:

<?phpfunction calculateNumbers(...$params){$total = 0;foreach($params as $v){$total = $total + $v;}return $total;} 
echo calculateNumbers(10, 20, 30, 40, 50); 
//Output 150?>

当使用“…”时,函数的每个参数都通过$params作为数组传递。

有许多不同的方法可以使用“…”运算符。下面是一些示例:

示例2:

<?phpfunction calculateNumbers($no1, $no2, $no3, $no4, $no5){$total = $no1 + $no2 + $no3 + $no4 + $no5;return $total;} 
$numbers = array(10, 20, 30, 40, 50);echo calculateNumbers(...$numbers); 
//Output 150?>

示例3:

<?phpfunction calculateNumbers(...$params){$total = 0;foreach($params as $v){$total = $total + $v;}return $total;}$no1 = 70;$numbers = array(10, 20, 30, 40, 50);echo calculateNumbers($no1, ...$numbers); 
//Output 220?>

例4:

<?phpfunction calculateNumbers(...$params){$total = 0;foreach($params as $v){$total = $total + $v;}return $total;} 
$numbers1 = array(10, 20, 30, 40, 50);$numbers2 = array(100, 200, 300, 400, 500);echo calculateNumbers(...$numbers1, ...$numbers2); 
//Output 1650 
?>

应该注意,变量参数不能成为目标由命名参数。

例5:

<?phpfunction sumIntegers(int ...$params): int {$sum = 0;foreach($params as $value){$sum += $value;}return $sum;}

echo sumIntegers(params: [1, 2, 3, 4]);// $params will be equal to ['params' => [1, 2, 3, 4]] in sumIntegers// throws TypeError sumIntegers(): Argument #1 must be of type int, array given
echo sumIntegers(arbitrary_name: 1, another_name: 2);// $params will be equal to ['arbitrary_name' => 1, 'another_name' => 2] in sumIntegers// Outputs: 3?>

使用解压缩关联数组作为函数调用的参数与使用每个键值对作为命名参数调用函数具有相同的效果。

例6:

<?phpfunction fullName(string $first_name, ?string $middle_name = null, ?string $last_name = null): string {return trim("$first_name|$middle_name|$last_name");}
$params = ['first_name' => 'John', 'last_name' => 'Doe'];echo fullName(...$params);// same as fullName(first_name: 'John', last_name: 'Doe')
// outputs 'John||Doe'?>

这可用于将命名参数传递给嵌套函数调用或类等。

例7:

<?phpfunction throw_exception(string $exception, ...$parameters) {throw new $exception(...$parameters);}
throw_exception(exception: 'Exception', code: 123);// executes throw new Exception(...['code' => 123])// which is the same as throw new Exception(code: 123);?>

?->NullSafe操作员

在PHP 8.0中添加

它是#0,它返回null,以防您尝试调用函数或从null获取值。Null安全运算符可以链接,可以在方法和属性上使用。

$objDrive = null;$drive = $objDrive?->func?->getDriver()?->value; //return null$drive = $objDrive->func->getDriver()->value; // Error: Trying to get property 'func' of non-object

空安全运算符不适用于数组键:

$drive['admin']?->getDriver()?->value //Warning: Trying to access array offset on value of type null
$drive = [];$drive['admin']?->getAddress()?->value //Warning: Undefined array key "admin"

NullSafe运算符"?->"从php8开始

在PHP8中,它已经被接受了这个新的运算符,你可以找到留档这里.?->它是NullSafe Operator,它返回null,以防你尝试调用函数或从null获取值…

示例:

<?php$obj = null;$obj = $obj?->attr; //return null$obj = ?->funct(); // return null$obj = $objDrive->attr; // Error: Trying to get property 'attr' of non-object?>

在php8

而不是编写经典的!== null,您可以使用?运算符只编写一行代码,代码变得非常清晰:

之前:

$firsName =  null;if ($session !== null) {$user = $session->user;if ($user !== null) {$name = $user->getName();if ($name !== null) {$firstName = $name->firstName;}}}

之后:

$firsName = $session?->user?->getName()?->firstName;

使用match而不是switchmatch表达式使用严格比较(===)代替。无论strict_types如何,比较都是严格的。

之前:

switch ('A') {case 'A':echo "found A";break;case 'B':echo "found B";break;}// Result: "found A"

之后:

echo match ('A') {'A' => "found A",'B' => "found B",};// Result: "found A"

#[]自PHP 8以来的属性

你可以从PHP 8开始写#[attribute_name]。这是PHP中的属性(也包括Rust和C#)。其他语言可能会使用注释(Java)或装饰器(Python,Javascript)等名称来实现类似的功能。在PHP 8之前,#[whatever]将是直到行尾的注释(因为#在PHP中开始注释)。因此,如果属性是一行上的最后一项,它将在PHP 8之前的版本中被忽略。如果不是一行上的最后一项,它将注释掉PHP 8之前在它之后的任何内容(从那时起]终止它)。

双点语法

当在限定的原生PHP字符串函数中的两个字符之间使用时,..用于表示包含的字符范围。a-e等效于abcde

echo trim('adobe', 'a..e');

打印:

o

允许双点范围语法的本地PHP函数

PHP中的\(反斜杠)符号是什么

它用于转义字符串类型或更改特定大小写:

示例:

这里\r\n\n用于传递到新行(如输入按钮)

echo "Hello world \n\r I am Herakl";

或者,您可以使用PHP_EOL。有一些例外。首先,它只能在两个引号(")条件下使用。此外,它是转义自

echo " Hello \\ I am robot";

在stackoverflow中,它看不正确。

反斜杠也用于命名空间使用条件名称:

namespace App\Http\Controllers;
use App\Models;

此外,您应该访问关于斜杠https://www.php.net/manual/en/function.addslashes.php