백엔드 개발 PHP 튜토리얼 PHP 연산자 우선순위에 대한 예외

PHP 연산자 우선순위에 대한 예외

Oct 15, 2019 pm 05:10 PM
우선 사항 연산자

PHP 연산자 우선순위에 대한 예외

今天在老王的技术手册看到一个问题:

<?php
if ($a = 100 && $b = 200) {
     var_dump($a, $b);
}
로그인 후 복사

输出是什么?

这个问题, 咋一看或许觉得简单, 但其实仔细推敲并不简单,

如果说布尔与之前的部分, 是由于优先级的问题, 但是如果仅仅是优先级的问题的话, 那么结果应该是:

$a = (100 && $b) = 200
로그인 후 복사

而实际上的结果, 确实高优先级的&&让步给次优先级的=, 让 $b = 200 先结合了.

究其原因, 是因为PHP并不完全遵守优先级的定义, 这个在PHP的手册中也有说明:

Note: Although = has a lower precedence than most other operators, PHP will still allow expressions similar to the following: if (!$a = foo()), in which case the return value of foo() is put into $a.

这样的设计, 个人不发表看法, 反正在C语言中, 这样类似的语句是判定为语法错的. PHP采用这样的设计, 很可能是历史原因,

有好奇的同学, 会想知道到底为什么, 之前jayeeliu网友也问过:

laruence你好:

问一个php运算符优先级的问题

$t == 1 && $tt = 2

按照php运算符优先级应该是

(($t == 1) && $tt) = 2

这个顺序执行,但实际上应该是

($t == 1) && ($tt = 2)

我有些不太理解。

其实也简单, 运算符优先级是在存在二义性文法的时候的一种规约规则选择的手段, 而PHP的语法分析文件定义中, 却让等号和T_BOOLEAN_AND(&&)之前不存在了规约冲突:

expr_without_variable:
  // 有隐规则存在, 相当于T_BOOLEAN_AND成为了"一元操作符".
  |   expr T_BOOLEAN_AND  { zend_do_boolean_and_begin(&$1, &$2 TSRMLS_CC); } expr
로그인 후 복사

最后, 顺便说一下, PHP对应于T_BOOLEAN_AND 还定义了 T_LOGICAL_AND(and) 和 T_LOGICAL_OR(or) , 这俩个的优先级都低于等号, 于是就会有了, 很多PHP入门教材示例代码中经典的:

$result = mysql_query(*)  or die(mysql_error());
로그인 후 복사

类似的还可以用or来实现三元操作符(?:)的功能:

$person = $who or $person = "laruence";
//等同于:
$person = empty($who)? "laruence" : $who;
로그인 후 복사

 更多PHP相关知识,请访问PHP中文网

위 내용은 PHP 연산자 우선순위에 대한 예외의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

인기 기사

R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
1 몇 달 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
1 몇 달 전 By 尊渡假赌尊渡假赌尊渡假赌
Will R.E.P.O. 크로스 플레이가 있습니까?
1 몇 달 전 By 尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

Windows 11에서 앱의 우선순위를 안전하게 설정하는 방법은 무엇입니까? Windows 11에서 앱의 우선순위를 안전하게 설정하는 방법은 무엇입니까? May 06, 2023 pm 06:28 PM

Windows는 우선 순위를 지정하여 가장 필요한 프로세스와 프로그램에 시스템 리소스를 할당하는 일을 훌륭하게 수행합니다. 설치한 대부분의 응용 프로그램은 기본 "보통" 우선 순위 수준에서 완벽하게 실행됩니다. 그러나 때로는 게임과 같은 프로그램의 성능을 향상시키기 위해 기본 일반 수준보다 높은 수준에서 프로그램을 실행해야 할 수도 있습니다. 하지만 여기에는 비용이 따르며 숙고해 볼 가치가 있는 거래입니다. 앱을 높은 우선순위로 설정하면 어떻게 되나요? Windows에는 다양한 프로세스와 프로그램을 실행하기 위한 총 6가지 우선순위 수준(낮음, 정상 미만, 보통, 정상 이상, 높음 및 실시간)이 있습니다. Windows는 우선 순위에 따라 응용 프로그램의 순위를 지정하고 대기열에 넣습니다. 우선순위가 높을수록 적용

Windows 11에서 알림을 비활성화하는 8가지 방법(및 3가지 팁) Windows 11에서 알림을 비활성화하는 8가지 방법(및 3가지 팁) May 05, 2023 pm 12:49 PM

알림은 생산성을 위한 훌륭한 도구이지만 때로는 방해가 될 수 있습니다. 알림을 완전히 비활성화하려는 경우든, 선택한 앱에 대해 비활성화하려는 경우든 이 페이지가 필요합니다. 또한 FocusAssist를 사용하여 알림을 자동으로 비활성화하고 활성화하는 방법도 살펴보겠습니다. 또한 설정 앱이 적합하지 않은 경우 명령 프롬프트, 레지스트리 편집기, 그룹 정책 편집기와 같은 도구를 사용하여 알림을 비활성화할 수 있습니다. Windows 11에서 알림을 비활성화하는 7가지 방법을 알아보려면 다음 튜토리얼을 확인하세요. Windows 11에서 알림을 비활성화해야 하는 이유는 무엇입니까? 알림을 비활성화하면 다양한 장점이 있으며 그 중 일부는 아래에 나열되어 있습니다. 하지만 중요한 앱에 대한 알림을 비활성화하면

Windows 11 작업 관리자에서 우선 순위를 변경하는 방법 Windows 11 작업 관리자에서 우선 순위를 변경하는 방법 May 17, 2023 am 10:26 AM

프로세스 우선순위란 무엇입니까? 컴퓨터는 제작자와 크게 다르지 않습니다. 멀티 태스킹을 하는 것처럼 보이지만 실제로는 자발적으로 작업 사이를 저글링하고 있습니다. 그러나 모든 프로세스나 프로그램이 동일하게 할당된 리소스는 아닙니다. 시스템을 가능한 한 원활하게 실행하는 데 필요한 프로세스와 같은 중요한 프로세스에는 높은 우선 순위가 부여되고, 주변에서만 작동하는 프로세스에는 낮은 우선 순위가 할당될 수 있습니다. 이렇게 하면 스트레스가 많은 경우에도 시스템이 원활하게 실행되는 데 도움이 됩니다. 우선순위란 무엇입니까? 프로세스에는 6가지 우선순위가 있습니다. 낮음 - 가장 낮은 우선순위입니다. 우선순위가 "낮은" 프로세스는 다른 모든 작업이 완료될 때까지 필요한 리소스를 받지 못합니다. 아래노마

Windows 11에서 앱이나 프로세스에 대해 생산성 모드를 켜거나 끄는 방법 Windows 11에서 앱이나 프로세스에 대해 생산성 모드를 켜거나 끄는 방법 Apr 14, 2023 pm 09:46 PM

Windows 11 22H2의 새로운 작업 관리자는 고급 사용자에게 도움이 됩니다. 이제 실행 중인 프로세스, 작업, 서비스 및 하드웨어 구성 요소를 감시할 수 있는 추가 데이터를 통해 더 나은 UI 환경을 제공합니다. 새로운 작업 관리자를 사용해 왔다면 새로운 생산성 모드를 발견했을 것입니다. 그것은 무엇입니까? Windows 11 시스템의 성능을 향상시키는 데 도움이 됩니까? 알아 보자! Windows 11의 생산성 모드란 무엇입니까? 생산성 모드는 작업 관리자의 작업 중 하나입니다.

C 언어의 루트 연산자는 무엇입니까? C 언어의 루트 연산자는 무엇입니까? Mar 06, 2023 pm 02:39 PM

C 언어에는 루트 연산자가 없습니다. 내장 함수 "sqrt()"는 루트를 여는 데 사용되며 예를 들어 "sqrt(4)"와 같은 구문이 사용됩니다. 4에 대해 제곱근 연산을 수행하는 것입니다. 결과는 2입니다. sqrt()는 C 언어에 내장된 루트 연산 함수입니다. 연산 결과는 함수 변수의 산술 제곱근입니다. 이 함수는 음수 연산이나 허수 결과를 출력할 수 없습니다.

Golang 오류: '잘못된 ... 연산자 사용' 어떻게 해결하나요? Golang 오류: '잘못된 ... 연산자 사용' 어떻게 해결하나요? Jun 24, 2023 pm 05:54 PM

Golang 개발자의 경우 "invaliduseof...operator"는 일반적인 오류입니다. 이 오류는 일반적으로 가변 길이 매개변수 함수를 사용할 때 발생합니다. 컴파일 타임에 감지되어 어떤 부분에 문제가 있는지 알려줍니다. 이 기사에서는 이 오류를 해결하는 방법을 소개합니다. 1. 가변 길이 매개변수 함수란 무엇입니까? 가변 길이 매개변수 함수라고도 하는 가변 길이 매개변수 함수는 Golang 언어의 함수 유형입니다. 가변 길이 매개변수 함수를 사용하면 다음과 같이 여러 함수를 정의할 수 있습니다.

Linux 프로세스 우선순위 조정 방법에 대한 자세한 설명 Linux 프로세스 우선순위 조정 방법에 대한 자세한 설명 Mar 15, 2024 am 08:39 AM

Linux 프로세스 우선순위 조정 방법에 대한 자세한 설명 Linux 시스템에서는 프로세스의 우선순위에 따라 시스템의 실행 순서와 리소스 할당이 결정됩니다. 프로세스의 우선순위를 합리적으로 조정하면 시스템의 성능과 효율성을 향상시킬 수 있습니다. 이 기사에서는 Linux에서 프로세스 우선순위를 조정하는 방법을 자세히 소개하고 구체적인 코드 예제를 제공합니다. 1. 프로세스 우선순위 개요 Linux 시스템에서 각 프로세스에는 그에 연관된 우선순위가 있습니다. 우선순위 범위는 일반적으로 -20~19입니다. 여기서 -20은 가장 높은 우선순위를 나타내고 19는

Windows 11에서 알림 설정을 사용자 지정하는 방법 Windows 11에서 알림 설정을 사용자 지정하는 방법 May 02, 2023 pm 03:34 PM

일반 알림 설정 사용자 정의 알림 설정의 기본부터 시작해 보겠습니다. 먼저, Windows 11에서 알림을 설정하려면 두 가지 방법이 있습니다. 가장 빠른 방법은 작업 표시줄 모서리에 있는 날짜 및 시간 부분을 마우스 오른쪽 버튼으로 클릭하고 알림 설정을 선택하는 것입니다. 또는 시작 메뉴를 사용하여 설정 앱을 열고 시스템 섹션(기본적으로 열림)에서 알림을 선택할 수 있습니다. 여기에서 알림 설정의 개요를 볼 수 있습니다. 알림을 완전히 비활성화하거나 첫 번째 옵션인 알림을 클릭하여 드롭다운 메뉴를 확장할 수 있습니다. 이 메뉴에는 알림 소리 끄기와 같은 몇 가지 추가 옵션이 있습니다. 미리 알림 및 수신 전화에 대한 특정 설정을 포함하여 알림을 잠금 화면에 표시할지 여부를 선택할 수도 있습니다.

See all articles