三元运算符左结合性[重复]

2023-12-06

在 PHP 手册中,我发现以下“用户贡献的注释”在“操作员”下。

请注意,在 php 中,三元运算符 ?: 具有左结合性,这与 C 和 C++ 中的右结合性不同。

您不能编写这样的代码(正如您可能在 C/C++ 中习惯的那样):

<?php 
$a = 2; 
echo ( 
    $a == 1 ? 'one' : 
    $a == 2 ? 'two' : 
    $a == 3 ? 'three' : 
    $a == 4 ? 'four' : 'other'); 
echo "\n"; 
// prints 'four' 

我实际尝试了一下,确实打印出来了four。但是我无法理解其背后的原因,但仍然觉得它应该打印two or other.

有人可以解释一下这里发生了什么以及为什么打印“四”吗?


在任何理智的语言中,三元运算符都是右结合的,这样你就可以expect您的代码将被解释为这样:

$a = 2;
echo ($a == 1 ? 'one' :
     ($a == 2 ? 'two' :
     ($a == 3 ? 'three' :
     ($a == 4 ? 'four' : 'other'))));    # prints 'two'

然而,PHP 三元运算符是奇怪的左关联,因此您的代码实际上相当于:

<?php
$a = 2;
echo (((($a == 1  ? 'one' :
         $a == 2) ? 'two' :
         $a == 3) ? 'three' :
         $a == 4) ? 'four' : 'other');   # prints 'four'

如果还不清楚,评估如下:

echo ((((FALSE    ? 'one' :
         TRUE)    ? 'two' :
         $a == 3) ? 'three' :
         $a == 4) ? 'four' : 'other');

echo ((( TRUE     ? 'two' :
         $a == 3) ? 'three' :
         $a == 4) ? 'four' : 'other');

echo ((  'two'    ? 'three' :
         $a == 4) ? 'four' : 'other');

echo (    'three' ? 'four' : 'other');

echo 'four';
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

三元运算符左结合性[重复] 的相关文章

  • 使用“INSERT ... ON DUPLICATE KEY UPDATE”插入多条记录

    我的表结构 table marks 我的目标 我想用条件插入或更新多条记录 我目前正在通过此查询进行检查 第一步 SELECT FROM marks WHERE student 115 AND param 1 第二步 if records
  • 如何在 PHP 中从字符串类名实例化? [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 如何创建返回方法名称的新实例 不幸的是我收到这个错误 错误 类名必须是有效的对象或字符串 这是我的代码 class Foo public f
  • 垃圾邮件打败了我所有的验证码

    我有一个 WordPress 博客 我在上面使用验证码插件的时间最长 因为它有效 最近我收到了大量的垃圾邮件 然后我尝试执行通过 PHP 生成的 将这些随机数添加在一起 但仍然没有成功 我不太确定需要做什么来阻止这些垃圾邮件 但这很烦人 我
  • 发送变量后的 wsdl 服务响应,php

    我是 SOAP WSDL 函数的新手 我有一位客户从一家从事汽车测试的公司获得了 wsdl 文件 我的客户是他们的分包商 他们告诉我们上传有关车牌 类别等信息 一旦详细信息发送完毕 服务器就会做出成功或失败的响应 请您协助 浏览不同的信息
  • 在laravel中组合两个不同的无关系数据库表查询进行分页

    我的数据库中有两个不相关的表 我需要将它们合并 以便我可以将其放在我的搜索视图中 但我不知道是否可能 这是我的代码 这news and season表不相关 但它们具有相似的列 我试图将其放入一个对象中以便于分页 是否可以 search r
  • php基于onclick函数输入日期类型

    用户选择日期 月份和年份 然后按一个按钮 根据他选择的日期向他显示数据库的值 不知道代码问题出在哪里
  • Zend Framework 中的动态默认模块

    有谁知道在 Zend Framework 中动态设置默认模块并且不会遇到命名空间问题的方法 例如 我想要做的是有一个允许加载的模块表 其中一个设置为默认模块 例如 我可能有 admin blog calendar 作为可以加载的模块 如果我
  • Facebook iFrame 应用程序 - 摆脱垂直滚动条?

    我已经转换了一个 Facebook 应用程序 http apps facebook com video preferans 从 FBML 到 iFrame 使用 PHP SDK 现在显示的垂直滚动条与我之前显示的内容数量相同 一个徽标 一个
  • 如何从脚本中创建新的 Joomla 用户帐户?

    我们正在为 Joomla 创建一个 XML API 允许合作伙伴网站在我们的网站上为其用户创建新帐户 我们已经创建了一个独立的 PHP 脚本来处理和验证 API 请求 但现在我们需要实际创建新帐户 我们最初只想进行 CURL 调用来提交注册
  • Cakedc.users => 总是重定向到主页

    我在新的 Cakephp 安装上使用插件 CakeDC Users 我有两个控制器 PagesController php CardsController php Pages 有 1 个操作 Beta 它是主页 Cards 有两个操作 索引
  • 切换到 mysqli 是个好主意吗?

    我正在考虑为我的所有 php 项目切换到 mysqli 我的代码编写方式 我运行非常简单的网站并构建了自己的基本框架 我在所有网站上使用该框架 我在修改函数和类时不应该遇到太多问题 然而 我只听说过关于准备好的语句的积极的事情 除了一些关于
  • 从 php 执行 bash 脚本并立即输出回网页

    我有一组 bash 和 Perl 脚本 开发在 Linux Box 上部署所需的目录结构 可选 从svn导出代码 从这个源构建一个包 这在终端上运行良好 现在 我的客户请求此流程的 Web 界面 例如 某些页面上的 创建新包 按钮将一一调用
  • 付款成功后保存到数据库(paypal)

    我试图找出在客户使用 paypal 支付商品费用后将数据 之前以表单提交 保存到数据库的最佳方法 沿着这个过程的一些事情 1 在实际网站上填写表格 gt 2 登录 Paypal gt 3 立即付款 PayPal gt 4 数据已插入数据库
  • 如何在同一 PHP 页面上多次使用 mysqli fetch_assoc() 和准备好的语句?

    有没有办法启用fetch assoc 在同一页上多次使用准备好的语句 data conn gt prepare SELECT FROM some table WHERE id data gt bind param i id data gt
  • php oracle客户端oci8安装出现什么问题

    我尝试了安装 PHP Oracle 客户端的所有过程 1 我安装了客户端版本8和32位 2 我在php ini中取消了oci的注释 3 重新启动Wamp 4 不确定是否真的安装 但我在 php ini 中得到了引用 5 但仍然无法连接 泰汉
  • 使用 PHP 中的 GD 库在图像上绘图

    我创建了一个代码来生成随机图案图像 它创建一个具有给定宽度和高度的图像 并用 40x40 像素的小矩形填充它 这是我的代码
  • 为什么这评估为 true

    为什么这评估结果为真
  • if/else 简写来定义变量

    我很难理解 if else 的 php 简写是如何描述的here https stackoverflow com questions 20233207 php if shorthand and echo in one line possib
  • 禁用 WooCommerce 手动/编辑订单的电子邮件通知

    需要 WooCommerce 专业知识 我需要禁用手动创建的订单的电子邮件通知 我必须使用处理状态 由于处理订单状态的自定义挂钩 我无法创建自定义状态 理想情况下 手动订单页面中可以勾选一个复选框 勾选后 它将禁止在每种状态下向客户发送电子
  • 如何将变量插入 PHP 数组?

    我在网上查了一些答案 但都不是很准确 我希望能够做到这一点 id result id info array id Example echo info 0 这有可能吗 您需要的是 不推荐 info array id Example varia

随机推荐

  • 用作 for 循环变量时,`e1` 和 `&e2` 有什么区别?

    编译器说e1 i32 and e2 i32 阅读文档后for slice Iter and 书中关于循环的章节 我还是一头雾水 更一般地说 切片中的特定元素是否可以被拥有 看来在情况2中 e2拥有一个元素 是吗 fn main let sl
  • 如何设置 VSCode 将大括号放在新行上?

    假设我输入以下代码并对其进行格式化 if condition Hello 如果这是 C 代码 则其格式如下 if condition Hello 如果是 JavaScript VSCode 将其格式化如下 if condition Hell
  • 在 ionic 项目中使用 Angular 库时,必须从注入上下文调用ject()

    我目前有一个项目 其中有一个角度工作区 在其中创建了一个角度网络应用程序 现在我还需要一个应用程序并创建了一个 Angular ionic 应用程序 我想重用现有的使用 AngularFireauth 和 AngularFirestore
  • Dapper 构建包含相同对象类型的对象树

    我有一个表 表示类别之间可能的父子关系 根类别不会包含 ParentId 值 而是 null 我认为还需要指出的是 它应该构建 N 级深度 例如 考虑以下 Sql 表 类别 身份证 名称 父ID 其中 ParentId 是与同一个表的 Id
  • 如何处理“org.postgresql.util.PSQLException:没有为参数1指定值”?

    注册到我的 Grails 应用程序后 用户会收到一封包含确认链接的电子邮件 单击该链接 将她带到相应的 启用 操作 这工作完美无缺 然而 现在似乎有一个非常特定的令牌的错误 导致此代码段的 user save 失败 assert user
  • asp.net 在中继器中是否可以从另一个类调用公共函数?

    假设我有一个中继器 它在代码隐藏中使用了一个名为 Test 的公共函数
  • 很棒的字体不显示图标

    我正在使用 Font Awesome 并且不希望通过 HTTP 添加 CSS 我下载了 Font Awesome 并将其包含在我的代码中 但 Font Awesome 显示的是带边框的方框而不是图标 这是我的代码 div style fon
  • 将其值设置为加密的 SAML 2 令牌时授权标头为 null

    我正在使用 Thinktechture Identity Server 通过 WS Trust 协议颁发 SAML 安全令牌 然后我使用包含令牌的授权 http 标头调用我的 WEB Api 使用 Thinktechture Identit
  • 如何在单独的文件中传递 Java 命令行选项?

    有没有办法启动 Oracle 的 Java exe 并让它从 Windows 上的文本文件获取命令行选项 我希望能够做的是这样的 java exe optionsFile myOptionsFile txt MyClass 其中 myOpt
  • Aws-Amplify:manifest.json 和 env.json 加载 index.html

    我正在构建的React应用程序有一个manifest json和一个env json 如下所示 但是 当我使用 AWS Amplify 将网站发布到 S3 存储桶时 manifest json 和 env json 会加载我的 index
  • Cocoa Pods 需要完全重新安装

    的背景 我对来自 NET 环境的 Unix 有点陌生 但我现在了解的足够多 足以让我陷入麻烦 我正在使用的现有代码使用 Cocoapods 因此我尝试安装 Cocoapods 最初 当我安装它时 它失败了 说它需要更新版本的 Ruby 为了
  • 在多线程应用程序中使用 libmysqlclient

    我正在 Linux 平台上构建一个 C 应用程序 我需要使用 libmysqlclient 来连接数据库 我下载了Linux源代码包mysql connector c 6 0 2 tar gz 我按照说明编译了它 我得到以下库 libmys
  • 检索包含指定点的矩形集

    我不知道如何以表演的方式实现这一点 所以我决定问你们 我有一个矩形列表 实际上只是 atm 正方形 但稍后我可能必须迁移到矩形 所以让我们坚持使用它们并使其更通用 在二维空间中 每个矩形由两个点指定 矩形可以重叠 我不太关心设置时间 因为矩
  • 如何取消文件上传?

    我想知道如何通过表单取消文件上传multipart form data 那可能吗 将表单发布到隐藏iframe 改变iframe src当你想取消时 浏览器将重新加载iframe并取消之前的POST对其提出请求
  • 边框和网格布局

    Hi everyone I have a problem If anyone can help it would be great I am using border and gridlayout and I am trying to sp
  • 如何使用 X509SecurityKey 进行 Asp.Net Core JWT 验证?

    我如何 可以 使用 X509SecurityKey 进行 Asp Net Core JWT 验证 我当前的代码大致是 X509SecurityKey signingKey null using X509Store store new X50
  • 可以发送到 WCF 服务的数据量是否有大小限制?

    可以发送到 WCF 服务的数据量是否有大小限制 我发送了一个对象数组 当数组达到一定大小时 我收到 404 错误请求异常 这是 httpHosting 的限制吗 另一种类型的托管效果会更好吗 有最大数组大小和最大内容大小 这是用于增加大小的
  • 使用 setcs 命令时 Clearcase 配置规范的行为很奇怪

    我将配置规范存储在文本文件中 以下为内容 element CHECKEDOUT element lost found none element My MYF R2 1 0 9 5179 element My My 2 1 0 13 4875
  • 如何动态获取当前的base URL? [复制]

    这个问题在这里已经有答案了 我正在尝试在我的网络项目中创建一个链接 在链接文本中显示链接 url 例如 如果我正在处理本地主机的示例项目 我希望 example jsp 页面的链接看起来像http localhost 8081 Exampl
  • 三元运算符左结合性[重复]

    这个问题在这里已经有答案了 在 PHP 手册中 我发现以下 用户贡献的注释 在 操作员 下 请注意 在 php 中 三元运算符 具有左结合性 这与 C 和 C 中的右结合性不同 您不能编写这样的代码 正如您可能在 C C 中习惯的那样