参考-这个符号在PHP中是什么意思? 这是什么?

参考-这个符号在PHP中是什么意思? 这是什么?,php,arguments,operators,symbols,semantics,Php,Arguments,Operators,Symbols,Semantics,这是一个关于PHP语法的问题集合。这也是一个社区Wiki,因此邀请每个人参与维护此列表 为什么会这样? 过去很难找到关于运算符和其他语法标记的问题。ª 其主要思想是提供有关堆栈溢出的现有问题的链接,以便我们更容易参考它们,而不是复制PHP手册中的内容 注:自2013年1月起,堆栈溢出。只需将搜索词用引号括起来,例如 我在这里该怎么办? 如果有人在这里指你,因为你问了这样一个问题,请在下面找到特定的语法。链接到的页面以及链接的问题很可能会回答您的问题。如果是这样的话,我们鼓励你对答案投赞成票。此列

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

为什么会这样? 过去很难找到关于运算符和其他语法标记的问题。ª 其主要思想是提供有关堆栈溢出的现有问题的链接,以便我们更容易参考它们,而不是复制PHP手册中的内容

注:自2013年1月起,堆栈溢出。只需将搜索词用引号括起来,例如

我在这里该怎么办? 如果有人在这里指你,因为你问了这样一个问题,请在下面找到特定的语法。链接到的页面以及链接的问题很可能会回答您的问题。如果是这样的话,我们鼓励你对答案投赞成票。此列表并不能替代他人提供的帮助

名单 如果您的特定令牌未在下面列出,您可能会在中找到它

&或

&$ =&

&=

&&

%

@

?:

???从PHP7开始

?串 ?整数 大堆 ?布尔 ?自PHP7.1起浮动

::

\

->

=>

^

>>

++增量运算符

-减量运算符

示例名称效果 ----------------------------------- ++$a预增量将$a递增1,然后返回$a。 $a++Post increment返回$a,然后将$a增加1。 -$a预减量将$a减量1,然后返回$a。 $a-递减后返回$a,然后按1递减$a。 这些可以在变量之前或之后

如果放在变量之前,则先对变量执行递增/递减操作,然后返回结果。如果放在变量之后,首先返回变量,然后执行递增/递减操作

例如:

$apples = 10;
for ($i = 0; $i < 10; ++$i) {
    echo 'I have ' . $apples-- . " apples. I just ate one.\n";
}
一旦到达z,aa就是下一个,依此类推

请注意,字符变量可以递增,但不能递减,即使如此,也只支持普通ASCII字符a-z和a-z

堆栈溢出柱:

语法 名称 描述 x==y 平等 如果x和y具有相同的键/值对,则为true x!=Y 不平等 如果x不等于y,则为true x==y 身份 如果x和y具有相同顺序和相同类型的相同键/值对,则为true x!==Y 非身份 如果x与y不相同,则为true ++x 增量前 将x增加1,然后返回x x++ 增量后 返回x,然后将x增加1 -x 预减量 将x减1,然后返回x x- 后减量 返回x,然后将x减1 x和y 和 如果x和y都为真,则为真。如果x=6,y=3,那么x<10,y>1返回true x&y 和 如果x和y都为真,则为真。如果x=6,y=3,那么x<10&&y>1返回true x或y 或 如果x或y中的任何一个为真,则为真。如果x=6,y=3,则x<10或y>10返回true x | | y 或 如果x或y中的任何一个为真,则为真。如果x=6,y=3,那么x<3 | | y>1返回true A.B 串联 连接两个字符串:Hi。哈 位运算符 什么是一点点?位表示1或0。基本上关闭0和打开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字节

为了更好地理解,请举几个例子 操作员和操作员:& 这将输出数字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位

第二个例子

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

操作员或操作员:| 这将输出数字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

_u中的下划线字符“u”是该函数的别名。

魔法常数:尽管它们不仅是符号,而且是该令牌系列的重要组成部分。有八个神奇的常数,它们随使用地点的不同而变化

__第\行:文件的当前行号

__文件\文件的完整路径和文件名。如果在包含中使用,则返回包含文件的名称。由于PHP4.0.2,_文件总是包含一个绝对路径,并解析符号链接,而在旧版本中,在某些情况下它包含相对路径

__目录:文件的目录。如果在包含中使用,则返回包含文件的目录。这相当于dirname\uuuu文件。此目录名后面没有斜杠,除非它是根目录。在PHP5.3.0中添加

__函数\函数名:函数名。从PHP5开始,在PHP4.3.0中添加了此常量,它返回函数名的原样 猪油区分大小写。在PHP4中,其值总是小写的

__类名:类名。从PHP5开始,在PHP4.3.0中添加了该常量,该常量返回声明为区分大小写的类名。在PHP4中,其值总是小写的。类名包括它在中声明的名称空间,例如Foo\Bar。请注意,从PHP5.4开始,类在traits中也起作用。在trait方法中使用时,_CLASS__uu是在其中使用trait的类的名称

__特质名称:特质名称。从PHP5.4开始添加到PHP5.4.0中,该常量返回声明为区分大小写的trait。trait名称包括在例如Foo\Bar中声明的名称空间

__方法:类方法名称。在PHP5.0.0中添加了方法名,方法名被声明为区分大小写,因此返回

__命名空间\当前命名空间的名称区分大小写。该常量在PHP5.3.0中添加的编译时中定义

类型运算符 instanceof用于确定PHP变量是否是某个类的实例化对象

<?php
class mclass { }
class sclass { }
$a = new mclass;
var_dump($a instanceof mclass);
var_dump($a instanceof sclass);
原因:上面的示例$a是mclass的对象,所以只使用mclass数据,而不是sclass的实例

带有继承的示例 克隆的例子 宇宙飞船操作员 在PHP7中添加 是PHP7中添加的最新比较运算符。它是一个非关联二元运算符,与相等运算符==,!=,==,!==,具有相同的优先级。此运算符允许在左手操作数和右手操作数之间进行更简单的三向比较

运算符将生成以下整数表达式:

两个操作数相等时为0 左操作数小于右操作数时小于0 左操作数大于右操作数时大于0 e、 g

因为PHP7你可以写。。。 PHP7中添加了Spaceship操作符 整数、浮点数、字符串、数组和对象,用于变量的三向比较

// 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
{}大括号

还有一些关于最后一篇文章的话

$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单引号字符串:

2个双引号字符串:

3.2.2.2.2.2.2.2

4自PHP 5.3.0以来的Nowdoc:

概述: $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,则为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时,一个小于、等于或大于零的整数。从PHP7开始提供。 一美元$b:$c:如果$a返回$b其他返回$c $a$c:和一美元一样吗$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提高到PHP5.6中引入的$b次幂的结果 ++$a:将$a增加1,然后返回$a。 $a++:返回$a,然后按1递增$a。 -$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 一美元$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???=$b:如果$a为空或未定义,$b的值被分配给$a-需要PHP>=7.4 笔记 and运算符和or运算符的优先级低于赋值运算符=

这意味着$a=正确和错误;等于$a=真和假

在大多数情况下,您可能希望使用&&a nd | |,其行为方式为C、Java或JavaScript等语言所知。

问题:

=>是什么意思

答复:

=>是我们人类决定用于在关联数组中分隔键=>值对的符号

详细说明:

要理解这一点,我们必须知道什么是关联数组。当传统程序员想到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: hello
echo $myArray2[1];// output: hello
echo $myArray3[1];// output: hello
到目前为止还不错。然而,作为人类,我们可能很难记住数组的索引[0]是2016年的值,数组的索引[1]是一个值,数组的索引[2]是一个简单的整数值。我们可以选择使用所谓的关联数组。关联数组与顺序数组有一些区别 这就是之前的情况,因为它们增加了在预定序列中使用的索引,每个后续值增加1

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

在声明关联数组的过程中,不仅要包含要放入数组中的值,还要放入名为key的索引值,在代码的后面部分调用数组时要使用该索引值。在声明过程中使用了以下语法: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;
现在,为了接收与以前相同的输出,将在数组索引中使用键值:

echo $myArray1["Greetings"];// output: hello
echo $myArray2["Greetings"];// output: hello
echo $myArray3["Greetings"];// output: hello
最后一点:

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

空合并运算符

PHP7.0中添加了此运算符,用于需要结合isset使用三元运算符的常见情况。如果第一个操作数存在且不为空,则返回第一个操作数;否则返回第二个操作数

<?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&运算符 一旦我们习惯了,生活就会变得更轻松1.仔细检查下面的例子

&通常检查$a和$b中设置的位是否已设置

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

所以在这一切的背后是位运算符和位的游戏

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

大多数人已经阅读了文档,但并不相信这些位运算符的实际使用情况

你会喜欢的例子 ==用于检查相等性,不考虑变量数据类型

==用于检查变量值和数据类型是否相等

实例 $a=5

如果$a==5-将计算为true

如果$a=='5'-将计算为true,因为在比较这两个值时,PHP会在内部将该字符串值转换为整数,然后比较这两个值

如果$a==5-将计算为true

如果$a=='5'-将计算为false,因为值为5,但该值5不是整数

零合并运算符??在PHP7中添加 对于一个操作符来说,这不是最吸引人的名字,但是PHP7带来了非常方便的null coalesce,所以我想与大家分享一个例子

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

echo $count ? $count : 10; // outputs 10
如果第二个元素与第一个元素相同,还可以使用一种简写法跳过第二个元素:echo$count?:10;//还有产出10

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

// $a is not set
$b = 16;

echo $a ?? 2; // outputs 2
echo $a ?? $b ?? 7; // outputs 16
此结构有助于优先考虑可能来自用户输入或现有配置的一个或多个值,并在缺少该配置时安全地返回到给定的默认值。这是一个很小的特性,但我知道一旦我的应用程序升级到PHP7,我就会使用它。

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

严格类型也会影响返回类型声明。在默认的弱模式下,返回的值将被强制到cor rect类型,如果它们尚未属于该类型。在强模式下,返回的值必须是正确的类型,否则将抛出TypeError

从PHP7.1.0开始,返回值可以通过在类型名称前加问号标记为可为空。这表示函数返回指定的类型或NULL

三点作为Splat运算符。。。从PHP5.6开始 PHP有一个操作符。。。三个点,称为Splat运算符。它用于传递函数中任意数量的参数,这种函数称为变量函数。让我们举个例子来使用。。。三个点

例1:

使用时,CalculateEnumbers函数的每个参数都将$params作为数组传递

有许多不同的方法使用…运算符。以下是一些例子:

例2:

例3:

例4:

?->NullSafe运算符 在PHP8.0中添加

如果您试图调用函数或从null获取值,它将返回null。Nullsafe运算符可以链接,并且可以在方法和属性上使用

$objDrive = null;
$drive = $objDrive?->func?->getDriver()?->value; //return null
$drive = $objDrive->func->getDriver()->value; // Error: Trying to get property 'func' of non-object
Nullsafe运算符不使用数组键:

$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"
空安全运算符?->可能是因为php8 在PHP8中,已接受此新操作员,您可以找到文档。?->它是NullSafe运算符,如果您试图调用函数或从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
?>

为了每个人的利益,请删除关于预递增速度无限快的粗体信息。这是过早优化的绝对最坏的例子,如果他们刚刚开始学习PHP,这种信息不应该在人们的头脑中。@莲花-我认为这是一个有趣的事实。如果你是PHP初学者,或者C++等等,那么++i和i+++就足够不同,可以以不同的速度工作。我觉得它很吸引人。@Peter Ajtai是的,它很有趣,但是从你构建文章的方式来看,你让它看起来像是PHP的基本要素之一,这对使用这种语言来说是绝对重要的。我知道这不是严格意义上的PHP,但是如果包括一个链接到for phpDocumentor的注释语法,这是常用的,也不可能搜索/**?我可以建议使用方括号和花括号吗?我也经常遇到这个问题,无法搜索特殊字符,这就是为什么我创建了一个不忽略特殊字符的搜索引擎。我也把它贴在了。好吧,从标题“为什么是这样?”开始,我猜这是因为主要的想法是链接到关于堆栈溢出的现有问题,这样我们就更容易引用它们。今天11月20日/15日有人问了一个问题,问到在php中$rsCat是什么,这个问题是否应该仍然可见而不是删除。奇怪的是,这里没有关于$variable的引用,只有关于$$variable变量的引用。我认为应该在某个地方进行修改。如果$a的值大于255怎么办?@AycanYaş305;大多数操作系统都使用32位和64位系统,这意味着限制远大于255 8位。@AycanYaş305;事实上,这里的单字节长度表示法甚至不正确,在现代64位平台上,即使是最小的整数在内存中也仍然是64位8字节。为什么和&是0 0 0 1 0 0 0和或|是0 0 0 0 1 0 1 1 1?以上也适用于“接口”。这有助于检查特定接口是否可用。不确定$a$b与$a-$b@AcidShout$a-$b适用于数字,但不适用于字符串、对象或数组。@mcrumley不,比这更糟糕。一般来说,$a-$b甚至不适用于数字;它只适用于整数。它不适用于非整数,因为usort将比较器函数的返回值强制转换为int,这意味着0.5被强制转换为0,这意味着两个差值小于1的数字,例如4和4.6,根据将哪个参数作为第一个参数传递给您的comparator函数,可能会将其错误地比较为相等。@MarkAmery迁移指南不是运算符的记录行为。为此,您需要查看手册的“语言运算符”部分,了解其背后的实际行为是否依赖于API的各种比较函数,例如,当您对字符串执行strcmp时,您无法保证每种情况下的实际返回值。当然,它几乎总是1、0或-1,但是对于不能像包装libc的strcmp那样保证的情况,您提供了与底层规范相同的定义行为safe@MarkAmery这里的要点是不允许人们依赖未定义的行为。有一种情况是,有些人得到的值不完全是1、0或-1,你会看到有人提交错误报告,认为语言中有错误。这就是为什么我们要证明,我们所能保证的是,值将小于、大于或等于0,而不一定是属性名的1、0和-1。{}符号。echo$电影->
电影->{'great-lines}->line;可用于访问SimpleXMLElement中的数据。也许它也可以用于其他情况@Rizier123:Heredocs的意思是不能用于初始化类属性。由于PHP5.3,此限制仅对包含变量的heredocs有效。?在$a中有一个错误$c、 上面写着和一美元一样$a:$c,但三元运算符检查value是否为true,另一方面,null合并检查null值,因此,如果$a为0,您将得到0,因为0不是null,例如,如果您有:$a=0$c=5;然后$a?$a:$c返回5,$a???$c返回0。添加此运算符感觉太早了,没有人会在任何实时代码中看到此运算符,甚至可能不会添加它。最好等到细节最终确定并妥善记录下来。我们已经收到了关于它的问题。:/如果提案失败,我们可以决定这是否值得保留。@johncode我很想把它们作为离题来结束,因为他们在问一种想象中的编程语言;或者这个问题属于时间线的另一部分,请检查时间机器上的设置;哈哈,我突然想起了这个想法。我问自己,这是否会给未来的游客带来价值,目前的答案是肯定的。但这可能会改变…@johncode问题是我们实际上还不能给出一个正确的答案-操作员的实际行为可能会完全改变,或者可能永远不会被添加,因此我们现在写的任何东西都很可能误导。唯一诚实的答案是语法错误,但有可能它在将来会有意义。添加这一点感觉相当不成熟,没有人会在任何实时代码中看到此运算符,甚至可能不会添加它。最好等到细节最终确定并妥善记录下来。@IMSoP我同意你的意见,但我被邀请在这里这么做……看起来我们现在有两个答案。就我个人而言,我只是投票赞成关闭另一个问题,而不是试图回答,因为现在没有这样的操作员。@ IMSoP在C++提案的StAcExpRoad上有很多问题,而且它们没有被关闭:我跟你说,不要在这里发布这个运算符,因为MMONTIN对C++进程了解不多,当讨论讨论的时候是合理的,公平地说,这一点看起来很可能成功地进行修改,但一般来说,PHP提出的许多特征都不适用于语言,而且,如果用户在参考列表中看到它们,就会感到相当困惑。也就是说,我在某种程度上只是一个脾气暴躁的老人:我知道什么是双下划线函数吗。它在WordPress中使用。我在任何地方都找不到它的定义。其使用示例:。似乎要使用WP image\u size\u names\u choose筛选器,必须使用\uuuu将短名称添加到要添加的命名大小数组中。@SherylHohman看起来像是翻译函数。非常感谢!我羡慕你卓越的谷歌技能和丰富的编码知识:-[TODO]在PHP8中包含新功能,以使用splat运算符和命名参数ref:
// 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
$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
$string = 'This is my string'; // print This is my string
$str = 'string';

$string = "This is my $str"; // print This is my string
$string = <<<EOD
This is my string
EOD; // print This is my string
$string = <<<'END_OF_STRING'
    This is my string 
END_OF_STRING; // print This is my string
$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: hello
echo $myArray2[1];// output: hello
echo $myArray3[1];// output: hello
$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;
echo $myArray1["Greetings"];// output: hello
echo $myArray2["Greetings"];// output: hello
echo $myArray3["Greetings"];// output: hello
<?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';
?>
   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
echo $count ? $count : 10; // outputs 10
// $a is not set
$b = 16;

echo $a ?? 2; // outputs 2
echo $a ?? $b ?? 7; // outputs 16
<?php
function get_item(): ?string {
    if (isset($_GET['item'])) {
        return $_GET['item'];
    } else {
        return null;
    }
}
?>
<?php
function calculateNumbers(...$params){
    $total = 0;
    foreach($params as $v){
        $total = $total + $v;
    }
    return $total;
}

echo calculateNumbers(10, 20, 30, 40, 50);

//Output 150
?>
<?php
function 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
?>
<?php
function 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
?>
<?php
function 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

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