我总是在OR表达式中使用||(两个管道),无论是在C#还是在PHP中.偶尔我会看到使用一根管道:|.这两种用法有什么区别?在使用其中一个时是否有任何注意事项,或者它们是否可以互换?

推荐答案

就像&&&运算符一样,双倍运算符也是"短路"运算符.

例如:

if(condition1 || condition2 || condition3)

如果条件1为真,则不判断条件2和3.

if(condition1 | condition2 | condition3)

这将判断条件2和3,即使1已经为真.由于您的条件可能是非常昂贵的函数,因此使用它们可以获得良好的性能提升.

There is one big caveat, NullReferences or similar problems. 例如:

if(class != null && class.someVar < 20)

如果类为null,则If语句将在class != null为false后停止.如果只使用&;,它会try 判断class.someVar,你会得到一个很好的NullReferenceException.对于Or操作符,这可能不是一个很大的trap ,因为你不太可能触发一些不好的事情,但要记住这一点.

不过,没有人会使用单一的&|运算符,除非您的设计中每个条件都是一个必须执行的函数.听起来像是设计的味道,但有时(很少)这是一种干净的做事方式.运算符&确实"运行这3个函数,如果其中一个返回False,则执行其他挡路",而第|则"只有在没有返回False的情况下才运行其他挡路"-这可能是有用的,但正如所说的,这通常是一种设计气味.

不过|&操作符还有第二种用法:Bitwise Operations.

Php相关问答推荐

需要数组中单个项目的Laravel 11验证必须是以下之一

Laravel变形 map 不适用于扩展模型

条纹 checkout :订阅试用版和额外付款(add_invoice_items)错误

为WooCommerce中的特定用户角色指定促销价格

PHP DOMDocument忽略第一个表S结束标记

PHP:从数组中获取唯一的数字组合

PHP-转义字符串内的双反斜杠

PHP,ZipArchive删除一个空文件?

PHP原始数据读取引发max_input_vars错误

PHP根据特定索引值从中删除子数组

Laravel区分大小写搜索

限制某些产品只能在WooCommerce的特定邮政编码/邮政编码范围内发货

打折时更改 Woocommerce 产品名称

显示自定义 Laravel 9 公共属性的错误

WooCommerce 按产品运输插件:仅收取较高的运输费用

Shopware 6 AuthControllerDecorator已弃用

在WooCommerce可变产品中显示所选变体的自定义字段

设置GA4 PHP API的setSubject以允许访问所有管理员账户属性

将Shopware 6后端中定义的值导入MultiFilter

NetBeans 不显示中文内容