PHP中的操作符的意思

Reference — What does this symbol mean in PHP?

这是什么?

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

为什么会这样?

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

注意:自2013年1月起,堆栈溢出支持特殊字符。只需用引号括住搜索词,例如"==" vs"==="

我该怎么办?

如果有人因为你问了这样一个问题而在这里指出你,请在下面找到具体的语法。链接到PHP手册的页面以及链接的问题很可能会回答您的问题。如果是这样,我们鼓励你对答案投赞成票。此列表并不能代替其他人提供的帮助。

名单

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

&位运算符或引用

  • 用一个和号启动一个PHP函数意味着什么?
  • 了解php&;(和、位和)运算符
  • php"&;"运算符
  • PHP中&;和&;的区别
  • 在PHP中,"&;"是什么意思?
  • 在这种情况下,"&;"是什么意思?
  • 在PHP中"&;sign"是什么意思?
  • 这个签名在PHP中的含义是什么?
  • 在PHP函数中,"&;运算符是如何工作的?
  • 在PHP中&in&2意味着什么?
  • 什么时候应该使用位运算符?
  • 有没有必要在一个物体前面使用和号?(&美元)

=&参考文献

  • php中的引用赋值运算符,=&;
  • php中的"=&;"和"&;="运算符是什么意思?
  • "&;="和"=amp;"运算符的作用是什么?
  • php中的=&;是什么意思?

&=位运算符

  • php中的"=&;"和"&;="运算符是什么意思?
  • "&;="和"=amp;"运算符的作用是什么?

&&逻辑运算符

  • '和'vs'&;'作为运算符
  • PHP中&;和&;的区别
  • php中的"and"和"&;&;"运算符有什么区别吗?
  • php-和/或关键字

%算术运算符

  • 百分比符号在PHP中是什么意思?
  • 什么是php运算符%以及如何在实际示例中使用它?

!!逻辑运算符

  • 双不!!)PHP中的运算符

@差错控制操作员

  • PHP中@符号的用法是什么?
  • php中变量名前的"at"符号:@$u post
  • PHP函数和@函数
  • 我应该在PHP代码中使用@?

?:三元运算符

  • 什么是PHP运算符"?还有":"打过电话,他们怎么办?
  • ?:php中的operator("elvis operator")。
  • 我在哪里可以读到用"?"完成的条件?和":"(冒号)?
  • 使用PHP 5.3?操作员

??空的coalesce运算符(从php 7开始)

  • C的空合并运算符(?在PHP中

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

  • 可为空的返回类型声明

控制结构的可选语法,三元运算符

  • php中的":"是什么?
  • 在PHP中":"是什么意思?

::范围分辨算子

  • 两个冒号在PHP中是什么意思?
  • php标记名t檓paamayim檓nekudotayim的意思是什么?
  • PHP中的::(双冒号)和->(箭头)有什么区别?
  • PHP中的后期静态绑定到底是什么?
  • 静态::StaticFunctionName())
  • 意外的t paamayim nekudotayim,需要t s分隔符

\名称空间

  • PHP中的反斜杠——它是什么意思?
  • 在php(5.3+)中,(反斜杠)做什么?

->类和对象

  • 调用了什么"->"php运算符,当大声读取代码时,该如何说?
  • 在PHP中,我们在哪里使用对象操作符"->"。
  • PHP中的::(双冒号)和->(箭头)有什么区别?
  • PHP语法$var1->var2是什么意思?
  • 在PHP中"->"是什么意思/指代?

=>银币


incrementing / decrementing算子

++增量算子

--减量操作符

1
2
3
4
5
6
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.

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

如果放在变量的增量/减量操作,是做的第一,然后返回的结果是可变的。如果把变量的变量后,返回的是第一,然后增量/减量操作是这样做的。

例如:

1
2
3
4
5
$apples = 10;
for ($i = 0; $i < 10; ++$i) {
    echo 'I have ' . $apples-- ." apples. I just ate one.
"
;
}

现场实例

以上是用在++$i案例,因为它是更快的。$i++将有相同的结果。

前位的增量是因为它真的很小。increments后的变量和"收益"的结果。扩展后的增量复制的特殊变量,因变量的第一个值后,只有第一个变量的值是用在与第二,replaces’s。

但是,你必须使用$apples--,因为第一,你想显示当前的苹果数相减,然后你想从一个它。

你也可以在PHP:增量快报

1
2
3
4
$i ="a";
while ($i <"c") {
    echo $i++;
}

下一步是一zaa是达到了,在线等。

Note that character variables can be incremented but not decremented and even so only plain ASCII characters (a-z and A-Z) are supported.

职位:堆栈溢出

  • 理解incrementing


位运算符

有什么问题?位是1或0的表示。基本上关闭(0)和打开(1)

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

1
2
3
4
5
-------------------------------------------
|      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"运算符:&

1
2
3
$a =  9;
$b = 10;
echo $a & $b;

这将输出数字8。为什么?好吧,让我们看看使用我们的表示例。

1
2
3
4
5
6
7
8
9
10
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| 0| 0|
-------------------------------------------

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

第二实例

1
2
3
4
5
$a =  36;
$b = 103;
echo $a & $b; // This would output the number 36.
$a = 00100100
$b = 01100111

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

"或"运算符:|

1
2
3
$a =  9;
$b = 10;
echo $a | $b;

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

1
2
3
4
5
6
7
8
9
10
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。


字母名称0

The underscore character''s in EDOCX1 commercial is an alias to the EDOCX1.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Syntax    Name             Description

x == y    Equality         True if x and y have the same key/value pairs
x != y    Inequality       True if x is not equal to y
x === y   Identity         True if x and y have the same key/value pairs
                            in the same order and of the same types
x !== y   Non-identity     True if x is not identical to y
++ x      Pre-increment    Increments x by one, then returns x
x ++      Post-increment   Returns x, then increments x by one
-- x      Pre-decrement    Decrements x by one, then returns x
x --      Post-decrement   Returns x, then decrements x by one
x and y   And              True if both x and y are true x=6 y=3
                           (x < 10 and y > 1) returns true
x && y    And              True if both x and y are true x=6 y=3
                           (x < 10 && y > 1) returns true
a . b     Concatenation    Concatenate two strings:"Hi" ."Ha"

<=>号宇宙飞船操作员添加到PHP 7中

飞船操作员<=>是php 7中添加的最新比较运算符。它是一个与相等运算符(==!====!==优先级相同的非关联二元运算符。此运算符允许在左侧操作数和右侧操作数之间进行更简单的三向比较。

运算符的结果是以下整数表达式:

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

例如

1
2
3
1 <=> 1; // 0
1 <=> 2; // -1
2 <=> 1; // 1

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

在php 7之前,你会写…

1
2
3
4
5
6
7
8
9
10
11
$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开始,你就可以写…

1
2
3
4
5
$arr = [4,2,1,3];

usort($arr, function ($a, $b) {
    return $a <=> $b;
});


魔法常数:尽管这些不仅是象征,而且是这个象征家族的重要组成部分。有八个神奇的常量,它们根据使用位置而变化。

__LINE__:文件的当前行号。

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

__DIR__:文件的目录。如果在include中使用,则返回包含文件的目录。这相当于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__起,特性也起作用。当在特征方法中使用时,__CLASS__是特征所使用的类的名称。

__TRAIT__:性状名。(在php 5.4.0中添加)从php 5.4开始,这个常量返回声明的特性(区分大小写)。特征名包括它声明的名称空间(例如Foo\Bar)。

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

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

来源


类型算子

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

1
2
3
4
5
6
<?php
class mclass { }
class sclass { }
$a = new mclass;
var_dump($a instanceof mclass);
var_dump($a instanceof sclass);

上面的示例将输出:

1
2
bool(true)
bool(false)

原因:上面的示例$amclass的对象,所以只使用mclass数据,而不使用sclass的实例。

继承示例

1
2
3
4
5
6
<?php
class pclass { }
class childclass extends pclass { }
$a = new childclass;
var_dump($a instanceof childclass);
var_dump($a instanceof pclass);

上面的示例将输出:

1
2
bool(true)
bool(true)

克隆示例

1
2
3
4
5
6
<?php
class cloneable { }
$a = new cloneable;
$b = clone $a;
var_dump($a instanceof cloneable);
var_dump($b instanceof cloneable);

上面的示例将输出:

1
2
bool(true)
bool(true)


PHP中的运算符概述:逻辑运算符:

  • $A&;$B:如果$A和$B都为真,则为真。
  • $A$B:如果$A或$B为真,则为真。
  • $A XOR$B:如果$A或$B为真,则为真,但不能同时为真。
  • !$A:如果$A不正确,则为真。
  • $A和$B:如果$A和$B都是真的,则为真。
  • $A或$B:如果$A或$B为真,则为真。

比较运算符:

  • $A=$B:如果类型杂耍后$A等于$B,则为真。
  • $A==$B:如果$A等于$B,则为真,它们属于同一类型。
  • 一元!=$B:如果类型杂耍后$A不等于$B,则为真。
  • $A<>$B:如果类型杂耍后$A不等于$B,则为真。
  • 一元!==$B:如果$A不等于$B,或者它们不是同一类型,则为真。
  • $A<$B:如果$A严格小于$B,则为真。
  • $A>B:如果$A严格大于$B,则为真。
  • $A<=$B:如果$A小于或等于$B,则为真。
  • $A>=$B:如果$A大于或等于$B,则为真。
  • $A<=>$B:当$A分别小于、等于或大于$B时小于、等于或大于零的整数。从php 7开始提供。
  • 一美元?$B:$C:如果$A返回$B,否则返回$C(三元运算符)
  • 一美元??$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的第二个幂的结果(在php 5.6中引入)

递增/递减运算符:

  • ++$A:将$A递增一,然后返回$A。
  • $A++:返回$A,然后将$A递增一。
  • --$A:将$A减少一,然后返回$A。
  • $A-:返回$A,然后将$A递减一。

按位运算符:

  • $A&;$B:设置在$A和$B中的位。
  • $A$B:设置在$A或$B中的位。
  • $A^$B:在$A或$B中设置但不是同时设置的位。
  • ~$A:在$A中设置的位没有设置,反之亦然。
  • $A<<$B:将$A$B步的位向左移动(每一步表示"乘以2")。
  • $A>>$B:将$A$B步的位右移(每一步表示"除以2")。

字符串运算符:

  • 美元。$B:A和$B的串联。

数组运算符:

  • $A+$B:A和$B的结合。
  • $A=$B:如果$A和$B具有相同的键/值对,则为真。
  • $A==$B:如果$A和$B具有相同顺序和相同类型的相同键/值对,则为真。
  • 一元!=$B:如果$A不等于$B,则为真。
  • $A<>$B:如果$A不等于$B,则为真。
  • 一元!==$B:如果$A与$B不相同,则为真。

分配运算符:

  • $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相同。美元
  • $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相同

注释

and运算符和or运算符的优先级低于赋值运算符=

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

在大多数情况下,您可能希望使用EDCOX1、5和EDCOX1(6),其行为方式如C语言、Java语言或JavaScript。


飞船操作员<=>(在php 7中增加)

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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
// Integers
echo 10 <=> 10; // 0
echo 10 <=> 20; // -1
echo 20 <=> 10; // 1

// Floats
echo 1.5 <=> 1.5; // 0
echo 1.5 <=> 2.5; // -1
echo 2.5 <=> 1.5; // 1

// Strings
echo"a" <=>"a"; // 0
echo"a" <=>"b"; // -1
echo"b" <=>"a"; // 1
// Comparison is case-sensitive
echo"B" <=>"a"; // -1

echo"a" <=>"aa"; // -1
echo"zz" <=>"aa"; // 1

// Arrays
echo [] <=> []; // 0
echo [1, 2, 3] <=> [1, 2, 3]; // 0
echo [1, 2, 3] <=> []; // 1
echo [1, 2, 3] <=> [1, 2, 1]; // 1
echo [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


{}卷曲的牙套 </P >

  • 块/卷曲的卷曲的牙套,牙套,好吗?
  • 卷曲的牙套,在PHP中的字符串
  • PHP中的数组notation牙套,卷曲的

和一些关于最后的话后 </P >

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
$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 works
echo"${x{4}}"; // does not work

echo"{$x[4]}"; // it works
echo"{$x{4}}"; // it works


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

1)单引号字符串:

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

2)双引号字符串:

1
2
3
$str = 'string';

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

3)Heredoc:

1
2
3
$string = <<<EOD
This is my string
EOD
; // print This is my string

4)nowdoc(从php 5.3.0开始):

1
2
3
$string = <<<'END_OF_STRING'
    This is my string
END_OF_STRING; // print This is my string


空合并运算符(??)

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

1
2
3
4
5
6
7
8
9
10
11
12
<?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';
?>

问题:

=>是什么意思?

答:

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

阐述:

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

1
2
3
4
5
6
7
8
$myArray1 = array(2016,"hello", 33);//option 1

$myArray2 = [2016,"hello", 33];//option 2

$myArray3 = [];//option 3
$myArray3[] = 2016;
$myArray3[] ="hello";
$myArray3[] = 33;

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

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

到现在为止,一直都还不错。然而,作为人类,我们可能会发现很难记住数组的索引[0]是2016年的值,数组的索引[1]是一个问候语,数组的索引[2]是一个简单的整数值。然后我们可以选择使用所谓的关联数组。关联数组与顺序数组有一些区别(之前的情况是这样的,因为它们按照预定的顺序递增使用的索引,每增加一个后续值就递增1)。

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

  • 在关联数组的声明过程中,不仅要包含要放入数组中的内容的value,而且还要放入在代码的后面部分调用数组时要使用的索引值(称为key)。声明时使用以下语法:"Key" =>"Value"

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

例如:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
    $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值:

1
2
3
echo $myArray1["Greetings"];// output: hello
echo $myArray2["Greetings"];// output: hello
echo $myArray3["Greetings"];// output: hello

最后一点:

因此,从上面的例子中,很容易看出,在数组中的值启动期间,=>符号用于表示数组中每个key对和value对之间的关联数组关系。


问题:

在PHP中,"&;"是什么意思?

php"&;"运算符

一旦我们习惯了它,生活就会变得更容易。(请仔细查看下面的示例)

&;通常检查设置在$A和$B中的位。

have you even noticed how these calls works?

1
2
3
4
   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);

所以在所有这些的背后是位运算符和位的游戏。

其中一个有用的例子是如下所示的简单配置,因此一个整型字段可以为您存储数千个组合框。

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

你会喜欢的例子

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
<?php

class Config {

    // our constants must be 1,2,4,8,16,32,64 ....so on
    const 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"
"
;
    }

    private function is($value){
        return $this->config & $value;
    }
}

new Config(Config::TYPE_ALL);
// cat dog rat lion bird
new Config(Config::TYPE_BIRD);
//bird
new Config(Config::TYPE_BIRD | Config::TYPE_DOG);
//dog bird
new Config(Config::TYPE_ALL & ~Config::TYPE_DOG & ~Config::TYPE_CAT);
//rat lion bird

空的coalesce运算符php

空合并运算符(??)已添加到php7中,用于需要与isset()一起使用三元的常见情况。如果第一个操作数存在,则返回它的第一个操作数,如果不为空,则返回它的第二个操作数,如以下示例:

1
2
3
$username = $_GET['user'] ?? 'nobody';
// This is equivalent to:
$username = isset($_GET['user']) ? $_GET['user'] : 'nobody';


==用于检查相等性,而不考虑变量数据类型

===用于检查变量值*和**数据类型的相等性。

例子

$a = 5

  • if ($a == 5)将评估为真

  • if ($a == '5')将计算为true,因为在比较这两个值时,php在内部将该字符串值转换为整数,然后比较这两个值

  • if ($a === 5)—将评估为真

  • if ($a === '5')将计算为false,因为值为5,但该值5不是整数。


  • coalesce空算子"??"(附加在PHP 7)

    没有在一个catchiest name算子,但在7个PHP方便让我以为我coalesce零股年的例子。 >

    在PHP 5,我们已经有了ternary算子,这测试的值,然后返回元素返回true如果这第二和第三:如果它不 >

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

    他也有shorthand论坛,这允许你跳过第二元素,如果这是同样的:我第一个回波计数一美元吗?10 / 10和输出; >

    7我们在PHP additionally得到吗?显示控制器,而?比极端混乱的,是怎么会在一起的问题,而不是通常使用双标记允许我们到连锁在一起的字符串值。阅读从左到右键和值,第一个零是不存在的,那将是returned值。 >

    1
    2
    3
    4
    5
    // $a is not set
    $b = 16;

    echo $a ?? 2; // outputs 2
    echo $a ?? $b ?? 7; // outputs 16

    这是有用的用于建造一个或更多的优先值给所有用户输入来也许从他们现有的构型和safely落回到了,如果这是默认的构型是失踪。这是那种小但它的特征就是知道我会用我所有的PHP应用程序升级很快,我的7。 >

    可为空的返回类型声明

    php 7添加了对返回类型声明的支持。与参数类型声明类似,返回类型声明指定将从函数返回的值的类型。返回类型声明的类型与参数类型声明的类型相同。

    严格的类型对返回类型声明也有影响。在默认的弱模式下,如果返回的值还不属于该类型,则它们将被强制为正确的类型。在强模式下,返回值的类型必须正确,否则将引发类型错误。

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

    1
    2
    3
    4
    5
    6
    7
    8
    9
    <?php
    function get_item(): ?string {
        if (isset($_GET['item'])) {
            return $_GET['item'];
        } else {
            return null;
        }
    }
    ?>

    来源