php运算符 - php错误控制
参考-这个符号在PHP中意味着什么? (12)
这是什么?
这是一系列关于PHP语法的问题。 这也是社区Wiki,因此邀请每个人参与维护此列表。
为什么是这样?
过去很难找到关于运算符和其他语法标记的问题.¹
主要思想是链接到Stack Overflow上的现有问题,因此我们更容易引用它们,而不是复制PHP手册中的内容。
¹注意:自2013年1月起,Stack Overflow 确实支持特殊字符 。 只需用引号括住搜索词,例如[php] "==" vs "==="
我该怎么办?
如果您因为提出这样的问题而被某人指向此处,请在下面找到具体的语法。 PHP手册的链接页面以及链接的问题可能会回答您的问题。 如果是这样,我们鼓励您提出答案。 此列表并不代替其他人提供的帮助。
列表
如果您的特定令牌未在下面列出,则可以在“ 解析器令牌列表”中找到它。
- 用&符号启动PHP函数意味着什么?
- 理解PHP&(&符号,按位和)运算符
- PHP“&”运算符
- PHP中&和&&之间的区别
- PHP中的“&”是什么意思?
- 在这种情况下,“&”是什么意思?
- PHP中“&”符号的含义是什么?
- 这个签名在PHP中意味着什么(&)?
- “&”运算符如何在PHP函数中工作?
- 在&PHP中有什么意义?
- 我什么时候应该使用按位运算符?
- 是否需要在物体前面使用&符号? ($)
=&
References
&=
按位运算符
&&
逻辑运算符
%
算术运算符
!!
逻辑运算符
@
错误控制运算符
?:
三元运算符
??
Null Coalesce运算符 (自PHP 7起)
::
范围解析运算符
- PHP中两个冒号意味着什么?
- PHP令牌名称T_PAAMAYIM_NEKUDOTAYIM的含义是什么?
- PHP中的::(双冒号)和 - >(箭头)有什么区别?
- PHP中的后期静态绑定究竟是什么?
- static::staticFunctionName()
- 意外的T_PAAMAYIM_NEKUDOTAYIM,期待T_NS_Separator
->
类和对象
- 什么是“ - >”PHP运算符调用,你怎么说大声朗读代码?
- 我们在PHP中使用对象运算符“ - >”在哪里?
- PHP中的::(双冒号)和 - >(箭头)有什么区别?
- PHP语法$ var1 - > $ var2是什么意思?
- PHP中的“ - >”是什么意思/指代?
=>
Arrays
^
按位运算符
>>
按位运算符
<<
按位运算符
<<<
Heredoc或Nowdoc
=
分配运营商
==
比较运算符
- PHP等式(== double equals)和identity(=== triple equals)比较运算符有何不同?
- PHP!=和==运算符
- 3个不同的等于
- PHP中的类型 - 杂耍和(严格)大于/小于比较
===
- “===”是什么意思?
- PHP等式(== double equals)和identity(=== triple equals)比较运算符有何不同?
- 3个不同的等于
- PHP中的类型 - 杂耍和(严格)大于/小于比较
!==
比较运算符
!=
比较运算符
<>
比较运算符
<=>
(自PHP 7.0起)
- 太空飞船(三路比较)操作员
|
按位运算符
||
逻辑运算符
~
按位运算符
+=
和-=
赋值运算符
++
和--
递增/递减运算符
- 了解增量
- 回答如下
.=
分配运营商
.
字符串运算符
,
函数参数
,
变量声明
$$
变量变量
`
执行运营商
<?=
短开标签
[]
Arrays (PHP 5.4以来的短语法)
- PHP数组......空括号的含义是什么?
- 的意义是什么 []
- Php array_push()vs myArray []
- 从PHP数组中读取时,[]的意思是什么?
- 数组的简写:literal
$var = []
空数组
<?
打开和关闭标签
...
参数解包 (自PHP 5.6起)
**
Exponentiation (自PHP 5.6起)
PHP中运算符的概述:
逻辑运算符:
- $ a && $ b:如果$ a和$ b都为TRUE,则为TRUE。
- $ a || $ b:如果$ a或$ b为TRUE,则为TRUE。
- $ a xor $ b:如果$ a或$ b为TRUE,则为TRUE,但不是两者都是。
- ! $ a:如果$ a不为TRUE,则为TRUE。
- $ a和$ b:如果$ a和$ b都为TRUE,则为TRUE。
- $ a或$ b:如果$ a或$ b为TRUE,则为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,则为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( null合并运算符 - 需要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递增1,然后返回$ a。
- $ a ++ :返回$ a,然后将$ a递增1。
- - $ a :将$ a减1,然后返回$ 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相同
注意
and
operator和or
运算符的优先级低于赋值运算符=
。
这意味着$a = true and false;
相当于($a = true) and false
。
在大多数情况下,您可能希望使用&&
和||
,其行为方式以C,Java或JavaScript等语言为基础。
<=>
宇宙飞船运营商
在PHP 7中添加
宇宙飞船运营商 <=>
是PHP 7中添加的最新比较运算符。它是一个非关联二元运算符,具有与相等运算符相同的优先级( ==
, !=
, ===
, !==
)。 该运算符允许在左手操作数和右手操作数之间进行更简单的三向比较。
运算符导致整数表达式为:
- 两个操作数相等时为
0
- 当左侧操作数小于右侧操作数时小于
0
- 当左侧操作数大于右侧操作数时,大于
0
例如
1 <=> 1; // 0
1 <=> 2; // -1
2 <=> 1; // 1
使用此运算符的一个很好的实际应用是比较类型回调,预期基于两个值之间的三向比较返回零,负或正整数。 传递给usort
的比较函数就是一个这样的例子。
在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;
});
按位运算符
有点什么? 位是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。
类型操作符
instanceof
用于确定PHP变量是否是某个类的实例化对象。
<?php
class mclass { }
class sclass { }
$a = new mclass;
var_dump($a instanceof mclass);
var_dump($a instanceof sclass);
以上示例将输出:
bool(true)
bool(false)
原因:上面的示例$a
是mclass
一个对象,因此只使用mclass
数据而不是sclass
实例
继承示例
<?php
class pclass { }
class childclass extends pclass { }
$a = new childclass;
var_dump($a instanceof childclass);
var_dump($a instanceof pclass);
以上示例将输出:
bool(true)
bool(true)
克隆示例
<?php
class cloneable { }
$a = new cloneable;
$b = clone $a;
var_dump($a instanceof cloneable);
var_dump($b instanceof cloneable);
以上示例将输出:
bool(true)
bool(true)
==
用于检查相等性而不考虑可变数据类型
===
用于检查变量值*和**数据类型的相等性
例
$a = 5
if ($a == 5)
- 将评估为trueif ($a == '5')
- 将评估为true,因为在比较这两个值时,php会在内部将该字符串值转换为整数,然后比较这两个值if ($a === 5)
- 将评估为trueif ($a === '5')
- 将评估为false,因为value为5,但此值5不是整数。
_()
的下划线字符“_”是gettext()
函数的别名。
++
增量运算符
--
递减运算符
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)。
帖子:
Null Coalesce Operator php
对于需要与isset()一起使用三元数的常见情况,已将空合并运算符(??)添加到PHP7中。 它返回第一个操作数(如果存在)并且不为NULL,否则返回其第二个操作数,如下例所示:
$username = $_GET['user'] ?? 'nobody';
// This is equivalent to:
$username = isset($_GET['user']) ? $_GET['user'] : 'nobody';
空结合运算符(??)
在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 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 "\n";
}
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
魔术常数 :虽然这些不仅仅是符号,而是这个象征家族的重要组成部分。 有八个魔法常数会根据它们的使用位置而改变。
__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__
也适用于特征。 在trait方法中使用时, __CLASS__
是使用特征的类的名称。
__TRAIT__
:特征名称。 (在PHP 5.4.0中添加)从PHP 5.4开始,此常量返回声明的特征(区分大小写)。 特征名称包括声明它的名称空间(例如Foo\Bar
)。
__METHOD__
:类方法名称。 (在PHP 5.0.0中添加)方法名称在声明时返回(区分大小写)。
__NAMESPACE__
:当前命名空间的名称(区分大小写)。 此常量在编译时定义(在PHP 5.3.0中添加)。
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"