PHP短路运算符

Jun 23, 2016 pm 01:31 PM

先看一段代码

1

$a = 5; $b = 20;if ($a = 10 || $b = 7) {    $a++;    $b++;}echo $a,"\n","",$b; //1 21

Copy after login

刚开始接触可能一眼看过去很容易说出最后的输出是5 20 但是仔细看后()里的条件表达式是赋值操作,所以应该输出11 21.但是计算机和我们开了一个并不好笑的玩笑。她妹的,最后竟然输出的是1 21。

计算机的思路和人脑的思路是有区别的,在编程的时候必须了解计算机的思维模式:机械式的思维模式。我们人在判断这个逻辑表达式的时候会跳跃性的先对$a和$b赋值,然后再做与运算,这样做虽然不影响逻辑运算的结果,但是也会产生上面这种副作用。事实上,计算机为了节省资源,采取了短路运算的方式解释这个逻辑表达式。当他发现与运算符的前一个数值(例如$a)是false时,他就会判断这个与运算表达式的运算结果是false,然后跳出这个逻辑运算表达式,继续执行下面的程序,而不会执行表达式剩下的语句。

至于这里为什么$a的值是1? 是因为在条件表达式的时候$a = 10的操作的时候php会把$a转换成boolean。上面的例子中$a = 10即转换成了true.所以在{}中的$a++ 是不能进行加法运算的。但是如果花括号中的$a++换成$a = $a + 1 那么此时就可以进行数值运算了。

短路运算的精髓就是
逻辑与(&&)->检查运算符第一个表达式是否为false,如果false直接返回false,后续的表达式直接忽略。
逻辑或(||)->检查运算符第一个表达式是否为true,如果是true直接返回true,后续表达式直接忽略。
PS:&&的优先级高于and、||的优先级高于or、等号(=)的优先级高于and和or

补充

1

php<?php// 下面的 foo() 不会被调用,因为它们被运算符“短路”了。$a = (false && foo());$b = (true  || foo());$c = (false and foo());$d = (true  or  foo());// "||" 的优先级比 "or" 高$e = false || true; // $e 被赋值为 (false || true),结果为 true$f = false or true; // $f 被赋值为 false [Altair注:"=" 的优先级比 "or" 高]var_dump($e, $f);// "&&" 的优先级比 "and" 高$g = true && false; // $g 被赋值为 (true && false),结果为 false$h = true and false; // $h 被赋值为 true [Altair注:"=" 的优先级比 "and" 高]var_dump($g, $h);?>//以上例程的输出类似于:bool(true)bool(false)bool(false)bool(true)

Copy after login

Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

Video Face Swap

Video Face Swap

Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Tools

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

Explain JSON Web Tokens (JWT) and their use case in PHP APIs. Explain JSON Web Tokens (JWT) and their use case in PHP APIs. Apr 05, 2025 am 12:04 AM

JWT is an open standard based on JSON, used to securely transmit information between parties, mainly for identity authentication and information exchange. 1. JWT consists of three parts: Header, Payload and Signature. 2. The working principle of JWT includes three steps: generating JWT, verifying JWT and parsing Payload. 3. When using JWT for authentication in PHP, JWT can be generated and verified, and user role and permission information can be included in advanced usage. 4. Common errors include signature verification failure, token expiration, and payload oversized. Debugging skills include using debugging tools and logging. 5. Performance optimization and best practices include using appropriate signature algorithms, setting validity periods reasonably,

How does session hijacking work and how can you mitigate it in PHP? How does session hijacking work and how can you mitigate it in PHP? Apr 06, 2025 am 12:02 AM

Session hijacking can be achieved through the following steps: 1. Obtain the session ID, 2. Use the session ID, 3. Keep the session active. The methods to prevent session hijacking in PHP include: 1. Use the session_regenerate_id() function to regenerate the session ID, 2. Store session data through the database, 3. Ensure that all session data is transmitted through HTTPS.

What are Enumerations (Enums) in PHP 8.1? What are Enumerations (Enums) in PHP 8.1? Apr 03, 2025 am 12:05 AM

The enumeration function in PHP8.1 enhances the clarity and type safety of the code by defining named constants. 1) Enumerations can be integers, strings or objects, improving code readability and type safety. 2) Enumeration is based on class and supports object-oriented features such as traversal and reflection. 3) Enumeration can be used for comparison and assignment to ensure type safety. 4) Enumeration supports adding methods to implement complex logic. 5) Strict type checking and error handling can avoid common errors. 6) Enumeration reduces magic value and improves maintainability, but pay attention to performance optimization.

Describe the SOLID principles and how they apply to PHP development. Describe the SOLID principles and how they apply to PHP development. Apr 03, 2025 am 12:04 AM

The application of SOLID principle in PHP development includes: 1. Single responsibility principle (SRP): Each class is responsible for only one function. 2. Open and close principle (OCP): Changes are achieved through extension rather than modification. 3. Lisch's Substitution Principle (LSP): Subclasses can replace base classes without affecting program accuracy. 4. Interface isolation principle (ISP): Use fine-grained interfaces to avoid dependencies and unused methods. 5. Dependency inversion principle (DIP): High and low-level modules rely on abstraction and are implemented through dependency injection.

How to debug CLI mode in PHPStorm? How to debug CLI mode in PHPStorm? Apr 01, 2025 pm 02:57 PM

How to debug CLI mode in PHPStorm? When developing with PHPStorm, sometimes we need to debug PHP in command line interface (CLI) mode...

How to automatically set permissions of unixsocket after system restart? How to automatically set permissions of unixsocket after system restart? Mar 31, 2025 pm 11:54 PM

How to automatically set the permissions of unixsocket after the system restarts. Every time the system restarts, we need to execute the following command to modify the permissions of unixsocket: sudo...

How to send a POST request containing JSON data using PHP's cURL library? How to send a POST request containing JSON data using PHP's cURL library? Apr 01, 2025 pm 03:12 PM

Sending JSON data using PHP's cURL library In PHP development, it is often necessary to interact with external APIs. One of the common ways is to use cURL library to send POST�...

See all articles