本文共 13041 字,大约阅读时间需要 43 分钟。
这是有关语法的不时出现的问题的集合。 这也是一个社区Wiki,因此邀请所有人参与维护此列表。
过去很难找到有关运算符和其他语法标记的问题。¹
主要思想是链接到Stack Overflow上的现有问题,因此我们更容易引用它们,而不必复制PHP手册中的内容。注意:自2013年1月起,Stack Overflow 。 只需用引号将搜索词引起来,例如
如果有人因提出这样的问题而将您指向此处,请在下面找到特定的语法。 的链接页面以及链接的问题可能会回答您的问题。 如果是这样,建议您增加答案。 此列表不能代替其他人提供的帮助。
如果您的特定令牌未在下面列出,则可以在找到它。
&
或
=&
&=
&&
%
!!
@
?:
??
(自PHP 7起)
?string
?int
?array
?bool
?float
(自PHP 7.1起)
:
,
::
\\
->
=>
^
>>
<<
<<<
=
==
===
!==
!=
<>
<=>
(自PHP 7.0)
|
||
~
+
,
+=
和-=
++
和--
.=
.
,
,
$$
`
<?=
[]
(自PHP 5.4起的简短语法)
<?
...
(自PHP 5.6起)
**
(自PHP 5.6起)
#
:?
Syntax Name Descriptionx == y Equality True if x and y have the same key/value pairsx != y Inequality True if x is not equal to yx === y Identity True if x and y have the same key/value pairs in the same order and of the same typesx !== y Non-identity True if x is not identical to y++ x Pre-increment Increments x by one, then returns xx ++ Post-increment Returns x, then increments x by one-- x Pre-decrement Decrements x by one, then returns xx -- Post-decrement Returns x, then decrements x by onex 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 truea . b Concatenation Concatenate two strings: "Hi" . "Ha"
有什么? 位表示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字节)
&
$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。
_
_()
的下划线字符'_'是函数的别名。
魔术常数 :尽管这些常数不仅是符号,而且是此令牌系列的重要组成部分。 有八个神奇常数会根据使用的位置而变化。
__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变量是否是某个类的实例化对象。
上面的示例将输出:
bool(true)bool(false)
原因:上面的示例$a
是mclass
的对象,因此仅使用mclass
数据,而不使用sclass
实例
上面的示例将输出:
bool(true)bool(true)
上面的示例将输出:
bool(true)bool(true)
<=>
太空飞船运营商 <=>
是PHP 7中添加的最新比较运算符。它是非关联二进制运算符,其优先级与相等运算符( ==
, !=
, ===
, !==
)相同。 此运算符允许在左侧和右侧操作数之间进行更简单的三向比较。
运算符的整数表达式为:
0
0
0
例如
1 <=> 1; // 01 <=> 2; // -12 <=> 1; // 1
使用此运算符的一个很好的实际应用是比较类型的回调,这些回调应基于两个值之间的三向比较而返回零,负或正整数。 传递给的比较函数就是这样一个例子。
$arr = array(4,2,1,3);usort($arr, function ($a, $b) { if ($a < $b) { return -1; } elseif ($a > $b) { return 1; } else { return 0; }});
$arr = [4,2,1,3];usort($arr, function ($a, $b) { return $a <=> $b;});
<=>
(PHP 7中添加)
整数,浮点数,字符串,数组和对象,用于变量的三向比较。
// 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"; // -1echo "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 workecho "${x[4]}"; // it worksecho "${x{4}}"; // does not workecho "{$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 = <<
4)Nowdoc(自PHP 5.3.0起):
$string = <<<'END_OF_STRING' This is my string END_OF_STRING; // print This is my string
and
运算符和or
运算符的优先级低于赋值运算符=
。
这意味着$a = true and false;
等效于($a = true) and false
。
在大多数情况下,您可能需要使用&&
和||
,其行为方式可从C,Java或JavaScript等语言得知。
++
增量运算符
--
递减运算符
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.
这些可以在变量之前或之后。
如果变量之前说,该递增/递减操作完成的第一变量,则返回的结果。 如果将变量放在变量之后,则首先返回变量,然后执行增量/减量操作。
例如:
$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++;}
一旦到达z
则下一个是aa
,依此类推。
请注意,字符变量可以递增但不能递减,即使如此,仅支持纯ASCII字符(az和AZ)。
堆栈溢出帖子:
题:
=>
是什么意思?
回答:
=>
是人类决定在关联数组中用于分隔"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来增加预定序列中使用的索引 )。
差异( 顺序数组和关联数组之间 ):
Durring关联数组的声明中,不仅包括了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
最后一点:
因此,从上面的示例可以很容易地看出, =>
符号用于表示数组中value
初始化期间数组中每个key
和value
对之间的关联数组的关系。
空合并运算符(??)
在PHP 7.0中已添加此运算符,以用于需要将三元运算符与isset()
结合使用的常见情况。 如果它存在且不为NULL
,则返回其第一个操作数; 否则返回第二个操作数。
问题 :
在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);
因此,以上所有操作背后都是按位运算符和位的游戏。
其中一个有用的例子是简单的配置,例如下面的Give,因此单个整数字段可以为您存储数千个连击。
大多数人已经阅读过文档,但没有依赖这些按位运算符的实际用例。
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
空合并运算符php
在需要将三元数与isset()结合使用的常见情况下,空合并运算符(??)已添加到PHP7。 如果存在,并且不为NULL,则返回其第一个操作数,否则返回其第二个操作数,例如以下示例:
$username = $_GET['user'] ?? 'nobody';// This is equivalent to:$username = isset($_GET['user']) ? $_GET['user'] : 'nobody';
==
用于检查相等性而不考虑变量数据类型
===
用于为变量值和数据类型 都检查平等
$a = 5
if ($a == 5)
-将评估为true
if ($a == '5')
-将评估为true,因为在比较这两个值时,PHP在内部将字符串值转换为整数,然后比较这两个值
if ($a === 5)
-将评估为true
if ($a === '5')
-由于值是5,因此将计算为false,但该值5不是整数。
不是操作员最常用的名称,但是PHP 7引入了非常方便的null合并,因此我想分享一个示例。
在PHP 5中,我们已经有一个三元运算符,该运算符将测试一个值,如果返回true,则返回第二个元素,否则返回第三个元素:
echo $count ? $count : 10; // outputs 10
还有一个简写,可以让您跳过第二个元素,如果它与第一个元素相同:echo $ count?:10; //也输出10
在PHP 7中,我们还获得了?? 运算符,而不是表示极端混乱,这是我通常将两个问号一起使用的方式,而是允许我们将一串值链接在一起。 从左到右读取,存在且不为null的第一个值是将要返回的值。
// $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。
PHP有一个运算符“ ...”(三个点),称为Splat运算符。 它用于在函数中传递任意数量的参数,这种类型的函数称为可变函数。 让我们以使用“ ...”(三个点)为例。
范例1:
当使用“…”时,calculateNumbers()函数的每个参数都将$ params作为数组传递。
使用“…”运算符的方式有很多。 下面是一些示例:
范例2:
范例3:
范例4:
转载地址:http://eudnb.baihongyu.com/