PSR-2 PHP 三元语法中是否需要括号?

2024-02-06

问题:PSR-2 PHP 三元语法中是否需要括号?

寻找以下三元语句的语法中的哪一个(如果有的话)符合 PSR-2 - 我还需要指向文档或一些权威链接:

$error = ($error_status) ? 'Error' : 'No Error';

OR

$error = $error_status ? 'Error' : 'No Error';


Note: php.net http://php.net/manual/en/language.operators.comparison.php#example-137它显示了带有括号的语法,但我在任何“官方 PSR-2”文档中都找不到它。


结论

如果没有这方面的 PSR-2 标准,哪种方式是最常见的约定?


PSR-2 标准 https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-2-coding-style-guide.md特别省略对运营商的任何意见:

本指南有意省略了许多风格和实践元素。这些包括但不限于: ... 运算符和赋值

由于括号用于对表达式进行分组,因此您的示例没有多大意义:

$error = ($error_status) ? 'Error' : 'No Error';

这里将单个变量括在括号中是没有意义的。更复杂的条件可能会受益于括号,但在大多数情况下,它们只是为了可读性。

更常见的模式是始终包围整个三元表达式:

$error = ($error_status ? 'Error' : 'No Error');

这样做的主要动机是 PHP 中的三元运算符具有相当尴尬的关联性和优先级,因此在复杂表达式中使用它通常会产生意外/无用的结果。

常见的情况是字符串连接,例如:

$error = 'Status: ' . $error_status ? 'Error' : 'No Error';

这里的串联(.运算符)实际上被评估before三元运算符,因此条件始终是非空字符串(开头'Status: '),你总是会得到字符串Error'作为结果。

需要使用括号来防止这种情况发生:

$error = 'Status: ' . ($error_status ? 'Error' : 'No Error');

当“堆叠”三元表达式以形成 if-elseif 链的等价物时,也存在类似的情况,因为 PHP 历史早期的一个错误意味着多个三​​元运算符按从左到右的顺序计算,而不是在满足条件时捷径整个错误分支是真的。

一个例子来自PHP 手册 http://php.net/manual/en/language.operators.comparison.php更清楚地解释了这一点:

// on first glance, the following appears to output 'true'
echo (true?'true':false?'t':'f');

// however, the actual output of the above is 't'
// this is because ternary expressions are evaluated from left to right

// the following is a more obvious version of the same code as above
 echo ((true ? 'true' : false) ? 't' : 'f');

 // here, you can see that the first expression is evaluated to 'true', which
 // in turn evaluates to (bool)true, thus returning the true branch of the
 // second ternary expression.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PSR-2 PHP 三元语法中是否需要括号? 的相关文章

  • 为什么我不能在 TCPDF 表中使用 č,ć,đ 图表?

    我正在为我的网站构建一个 tcpdf 文件 该 tcpdf 文件中有一个包含一些数据的表格 但我无法使该章程正常工作 对于编码 我使用 windows 1250 宪章女巫不起作用 我已经尝试过 utf 8 但仍然没有得到这个章程 tcpdf
  • Smarty输出空白页

    已解决 模板文件错误 我有这样的 Smarty 设置 require once smarty Smarty class php smarty new Smarty smarty gt compile dir compile dir smar
  • 通过 __get() 通过引用返回 null

    快速规格 PHP 5 3 error reporting 1 the highest 我正在使用 get 通过引用技巧神奇地访问对象中任意深度的数组元素 快速示例 public function get key return isset t
  • Yii2 异常:ApcCache 需要加载 PHP apc 扩展

    在高级模板前端的主配置中配置缓存组件时 我收到异常 在我的 php ini 上启用了扩展 rsults 如何解决此问题 前端 config main php cache gt class gt yii caching ApcCache ke
  • PHP 或 WAMP 不确定是什么

    我已经安装了 WAMP 服务器 2 0 PHP 5 4 3 安装WAMP后我已经重新启动了所有服务并且可以打开 phpinfo 显示良好 phpmyadmin 它也显示得很好 我可以使用数据库 然而 当在 Chrome 中运行简单的 php
  • PHP 开发相当于 Mongrel/Webrick 吗?

    PHP 开发中是否有与 Rails 开发期间使用 Mongrel Webrick 等效的方法 我通常在端口 3000 上使用 Mongrel 在开发过程中为我的 Rails 应用程序提供服务 我从事 PHP 开发已经有几年了 据我所知 方法
  • 为什么这会返回资源 id #2? [复制]

    这个问题在这里已经有答案了 可能的重复 我如何从 PHP 中的 MySql 响应中 回显 资源 id 6 https stackoverflow com questions 4290108 how do i echo a resource
  • 在 Laravel 5 中截断表

    描述 我有一个充满测试数据的表 有时 我想清除它以获取新数据 我可以在 DBMS 应用程序中执行截断 例如MySQL 工作台 但我试图在我的应用程序中实现它 Goal 创建一个按钮 单击时截断数据库中的表 这是我的步骤 1 声明一条路线 R
  • 使用先前的反向引用作为命名捕获组的名称

    有没有办法使用对先前捕获组的反向引用作为捕获组的名称命名捕获组 这可能不可能 如果不可能 那么这就是一个有效的答案 下列 data description some description preg match data matches p
  • 如何在 PHP 中使用 cURL 发出同时包含 GET 和 POST 参数的请求?

    其他人已经问过如何从 perl java bash 等执行此操作 但我需要在 PHP 中执行此操作 并且我没有看到任何已提出的专门与 PHP 相关的问题 或包含 PHP 的答案 My code ch curl init url curl s
  • PHP Solr PECL 扩展安装

    我已经使用命令安装了 pecl solr pecl install solr 和梨使用 wget http pear php net go pear phar php go pear phar 重启Apache后 我仍然收到错误 Fatal
  • Laravel 5 中的自定义验证器

    我正在将 Laravel 应用程序从 4 升级到 5 但是 我有一个自定义验证器 但无法运行 在L4中 我做了一个验证器 php文件并将其包含在全局 php using require app path validators php 我尝试
  • 使用 XSLT 将 XML 转换为 SQL

    由于我无法控制的原因 我将获得一个 XML 文件和一个 XSLT 文件 该文件可以将 XML 文件转换为 SQL 代码或错误 现在让我们假设我们可以信任提供 XML 文件的人不会在 XML 中包含危险的构造 我什至不知道是否应该使用 Sim
  • fgetcsv 在特定行打开?

    有没有办法使用 fgetcsv 在特定行上打开 我有一个非常大的 csv 想通过 ajax 一次运行大约 100 行 我可以轻松停止 while 循环 但如何在特定行上打开 或者这是不可能的 从第 100 行开始读取没有简单的方法 但您可以
  • 强制 Composer 下载 git repo 而不是 zip

    我对作曲家有一些问题 require php gt 5 3 2 kriswallsmith buzz 0 7 Repo https github com kriswallsmith Buzz tree v0 7 https github c
  • 使用 PHP 的 MySQL 连接字符串

    我正在尝试通过本地计算机连接到托管在我的服务器上的数据库 我的服务器有cPanel 11 它是一个典型的共享服务器 由CentOS提供支持 安装了PHP和MySQL 准确地说 我在同一台服务器上持有经销商帐户 我想在不同帐户或域之间访问数据
  • 如何仅使用 PHP5 RecursiveDirectoryIterator 类递归显示具有特定文件类型的文件夹和子文件夹

    您好 我正在尝试使用 FilterIterator 上的扩展来获取 RecursiveDirectoryIterator 类 但由于某种原因 它仅在根目录上进行迭代 我的代码是这样的 class fileTypeFilter extends
  • 从 PHP 数组生成 HTML 表

    我不明白这一点 我需要解决看似简单的问题 但这超出了我的逻辑 我需要编写一个函数 table columns input cols 它将输出一个表 示例 input array apple orange monkey potato chee
  • 如何在laravel中注册后自动登录

    我在 laravel 中注册用户时遇到问题 user假设是包含所有数组元素的数组 同时自动登录以下代码结果false 数据库中保存的密码是hash make password user id this gt user model gt ad
  • php 数组中出现意外的 json 输出结构

    我正在尝试转换动态数据 如何从 PHP 获取此 JSON JSON 122240cb 253c 4046 adcd ae81266709a6 item 0 3 这就是我所做的 但它不起作用 PHP json array 122240cb 2

随机推荐

  • HighcharteR:绘图带和绘图线不起作用

    我正在尝试在 highcharteR 中绘制每日值系列 在图表中标记垂直线 绘图线 和日期周期 绘图带 我研究了几个SO问题并达到了这个脚本 但我发现了以下问题 1 未绘制绘图区 2 未绘制情节 3 x轴应该是以我不理解的方式转换的日期 我
  • FormControl uniqueUntilChanged() 不起作用

    我很难做distinctUntilChanged在下一个场景中工作 我制作了一个异步验证器 它使用服务来检查给定用户名的用户是否存在 该验证器作为指令绑定到输入 class ValidateUniqueUsernameDirective i
  • 可以配置 Tmux 加载 ~/.bashrc 而不是 ~/.bash_profile 吗?

    现在 当我登录 Tmux 时 仅 bash profile被加载 我想要 bashrc改为被呼叫 那可能吗 这个问题与以下无关tmux 要解决它 请确保添加source bashrc to bash profile就是这样 您可以了解更多有
  • dynamoDB - 通过主键数组从数据库获取多个项目

    我有一个用户 id 数组 我想从 dynamoDB 表中获取具有该 id 的所有用户 文档里没找到 有任何想法吗 我最终使用了batchGet 这是一个操作AWS DynamoDB DocumentClient http docs aws
  • ORG指令后设置段寄存器

    我目前正在关注操作系统开发教程 http brokenthorn com Resources OSDev4 html 其中包括有关引导加载程序的讨论 我的引导加载程序当前处于 16 位实模式 因此 我能够使用提供的 BIOS 中断 例如 V
  • 为什么不能在 do while 循环的表达式部分内声明变量?

    以下语法有效 while int i get data 但以下情况则不然 do while int i get data 我们可以通过标准草案了解原因N4140部分6 4 1 condition expression attribute s
  • Panda 的 DataFrame 双转置将数字类型更改为对象

    我正在从 Excel 中的两个不同位置读取数据帧的标题和数据 两者都正确对齐但不相邻 标题可能包含许多空白 因此我需要丢弃这些标题和数据中相应的列 所以我的最终帧具有非空标头和与这些标头相对应的数据 下面使用转置的逻辑有效 但我在双重转置时
  • 无法解析类型“System.Net.Http.HttpClient”的服务

    我创建了一个ViewComponent调用一个类REST API使用HttpClient 这是代码 public class ProductsViewComponent ViewComponent private readonly Http
  • C 中的默认参数和参数提升

    我当时正在研究默认参数提升 并陷入了困境 在 C 2011 ISO IEC 9899 2011 中 相关部分似乎是 6 5 2 2 函数调用 6 如果表示被调用的表达式 函数具有不包含原型的类型 即整数 对每个参数执行升级 并且具有以下参数
  • 从 ASP.NET 中的 URL 获取数据

    我是 ASP NET 新手 我想从 ASP NET 上的 url 获取数据 需要将数据存储到字符串中 如果假设这是我的 URL 那么我想以字符串形式获取此 URL 数据 http www islamicfinder org prayer s
  • 将 XPath count() 与 contains() 结合使用

    我正在使用以下 次优 XML a b b a
  • mysql 中未来日期的日期时间值不正确

    MySQL语句 insert into banners path app id enabled from date to date updated at created at values banners example png com e
  • SSL 在 Chrome 中工作,但有时在 Firefox 中工作,而不在 IOS、Android 或 Blackberry 上工作

    我有 SSL 问题 我已将站点从一台服务器移至另一台服务器 因此必须移动 SSL 不幸的是 新服务器的根域与原始服务器不同 示例 原始版本为 www domain com 新版本为 www domainisnew com 我有多个网站使用此
  • 根据其他数据框中提供的范围值创建新列

    我有两个数据框 其中一个数据框作为参考表 另一个包含实际值 gt gt gt reference table MinRange MaxRange Multiplier Group 0 10 30 2 A 1 10 40 4 B 2 10 1
  • 使用 Java/JNI 时 Linux 上的信号处理

    我从事在 Wind River Linux 上运行的嵌入式系统的工作 它是 Java 和 C 的混合体 并带有一些用于技术之间通信的 JNI 我们构建了自定义错误处理 以便在出现任何意外错误时生成回溯和其他信息来帮助我们确定问题 此错误处理
  • Intel 64架构中CALLF(Far Call)可以有64位地址内存操作数吗?

    在 Intel 32 位架构中 我可以使用 ModR M 字节调用 32 位地址位置 根据英特尔手册 我需要 2 010B 用于操作码扩展 00B 用于 Mod 101B 允许我拥有 32 位位移 如果我想在 64 位架构中进行远调用 以便
  • alpha 版和 beta 版有什么区别?

    我想在不同的环境中部署我的软件并逐步提供功能 我应该何时何地使用 alpha 和 beta 版本 阿尔法版本 这是当您正在开发的功能不完整或部分完成时发布的版本 假设在机票预订系统中 您已经开发了座位选择 但仍保留支付实现 在这种情况下 您
  • 散点图的 Highcharts 图例符号大小

    我在为具有不同符号大小的 3d 散点图渲染图例时遇到问题 请参阅http jsfiddle net YyV6x 4 http jsfiddle net YyV6x 4 图例采用与主图表中相同大小的符号 并且图例项目的位置完全偏离 我尝试强制
  • 如何改进该算法来解决修改后的邮票难题?

    飞镖之子问题 http azspcs net Contest SonOfDarts是一场比赛Al Zimmermann 的编程竞赛 http azspcs net 于 2010 年 6 月 20 日结束 假设您有一个分为 R 个区域的飞镖靶
  • PSR-2 PHP 三元语法中是否需要括号?

    问题 PSR 2 PHP 三元语法中是否需要括号 寻找以下三元语句的语法中的哪一个 如果有的话 符合 PSR 2 我还需要指向文档或一些权威链接 error error status Error No Error OR error erro