사용법을 이해하기 위한 PHP의 '?:' 연산자에 대한 심층 분석!

青灯夜游
풀어 주다: 2023-04-10 17:16:02
앞으로
16469명이 탐색했습니다.

이 글에서는 PHP의 "?:" 연산자(삼항 표현식)에 대한 심층 분석을 통해 해당 기능, 사용 방법 및 효과를 살펴보겠습니다. 모두에게 도움이 되기를 바랍니다!

?: 연산자는 사용법을 이해하기 위한 PHP의 '?:' 연산자에 대한 심층 분석!

PHP에서 어떻게 생겼나요? ?: 运算符是什么样的?

如下:

(($request_type == 'SSL') ? HTTPS_SERVER : HTTP_SERVER)
로그인 후 복사

它是一个条件运算符。

$x ? $y : $z
로그인 후 복사

表示 “如果 $x 是 true,那么采用 $y;如果不是则采用 $z” 。

它还可以简化。

$x ?: $z
로그인 후 복사

表示 “如果 $x 是 true,那么采用 $x;如果不是则采用 $z” 。

有人会说 ?: 是 “三元运算符” 。这是不对的。 ?: 如果是三元运算符,那么它应该有三个操作数。 之所以这么认为是因为它通常是当前语言唯一的三元运算符。

下面将介绍什么是三元,怎么使用,什么时候使用,为什么使用,以及什么时候不能用。

什么是三元操作符?

? :ifelse 的缩写。这里 中间有关于 “三元运算符” 的官方说明。

自 PHP 5.3:

从 PHP 5.3 开始,可以省略三元运算符中间部分。表达式 expr1 ?: expr3 ,如果 expr1 是 TRUE,则返回 expr1 ,否则返回 expr3 。

自 PHP 7.0

PHP 7 有新的 Null 合并运算符。这和三元运算一样,也被叫做 “isset 三元元算符” 。这可以从链式三元元算中移除 isset() 。

在 PHP 5 中,如果在一个可能不存在的变量上使用三元运算符,必须要在三元语句的开头使用 isset():

$result = isset($nonExistentVariable) ? $nonExistentVariable : ‘default’;
로그인 후 복사

在 PHP 7 中,可以这样做:

$result = $nonExistentVariable ?? ‘default’;
로그인 후 복사

记住 Null 合并运算符不能处理空字符串。可以链式的使用它来检查多个变量:

$user = $userImpersonatingAnotherUser ?? $loggedInUser ?? “Guest”;
로그인 후 복사

PHP 中,可登录的系统,管理员冒充用户进行测试的情况并不少见。如上,如果用户不冒充另一个用户,且没有登录的话,他将成为一个访客。如果还不理解的话,继续读下去,了解一下三元运算符是什么,是如何使用的,再后过头来看看在新 PHP

怎么使用三元运算符?

正常 if 语句如下:

if (isset($_POST['hello']))
{
    $var = 'exists';
}
else
{
    $var = 'error';
}
로그인 후 복사

使用三元运算符简化。

$var = isset($_POST['hello']) ? 'exists' : 'error';
                 ^            ^     ^    ^     |
                 |           then   |   else   |
                 |                  |          |
          if post isset         $var=this   $var=this
로그인 후 복사

更简短,但是难理解。这不仅可以像上面这样用在变量 $var 上,还可以像下面这样在 echo 中使用,来检查变量是不是 false:

$isWinner = false;

// 输出 'you lose'
echo ($isWinner) ? 'You win!' : 'You lose';

// 同上
return ($isWinner) ? 'You win!' : 'You lose';
로그인 후 복사

为什么要使用他们?

我觉得三元运算是迷人的。一些开发者想要表现,但是三元运算符就 不错特别是结合其他功能的时候,例如 PHP 5.4 的最新 short echos.

<?php 
    $array = array(0 => &#39;orange&#39;, 1 => &#39;multicoloured&#39;); 
?>

<p>
    <?php foreach ($array as $key => $value) { ?>
        <span><?=($value===&#39;multicoloured&#39;)?&#39;nonsense&#39;:&#39;pointless&#39;?></span>
    <?php } ?>
</p>

<!-- Outputs:
    <span>
        pointless
    </span>
    <span>
        nonsense
    </span> 
-->
로그인 후 복사

稍微跑题了,在 'view/template' 中 (注意 MVC 范例),如果要用上一点服务端的逻辑,使用三元运算符或者其他短句将会是最好的方式。“其他短句”,像下面这样:

if ($isWinner) :
    // Show something cool
endif;
로그인 후 복사

注意,我个人不喜欢这样的无意义的短句。

三元运算符有多快?

人们喜欢微优化。也是这样做的。因此清楚三元运算比一般的 if / else 语句快多少是很重要的。

从 文章,了解到大约快 0.5ms。这已经快很多了!

等等,不是这样的。这个结论源于反复在一行代码中进行成千上万次的运算。因此完全不用担心,这是没有意义的。

不实用三元运算符

代码应该:

  • 易读
  • 易理解
  • 易修改

显然,这取决于看代码人的编码能力和对此类问题的理解能力。之前的简单示例没有问题,但是下面这样的,是不好的:

echo ($colour === &#39;red&#39;) ? "Omg we&#39;re going to die" :
     ($colour === &#39;blue&#39; ? "Ah sunshine and daisies" :
     ($colour === &#39;green&#39; ? "Trees are green"
     : "The bloody colour is orange, isn&#39;t it? That was pointless."));
로그인 후 복사

原因如下:

  • 三元嵌套过长
  • 可以使用 switch
  • 은 다음과 같습니다.
rrreee

조건부 연산자입니다. rrreee는 "$x가 true이면 $y를 사용하고, 그렇지 않으면 $z를 사용하십시오"를 의미합니다. 단순화할 수도 있습니다.

rrreee

는 "$x가 true이면 $x를 사용하고, 그렇지 않으면 $z를 사용하십시오"를 의미합니다. 어떤 사람들은 ?:가 "삼항 연산자"라고 말할 것입니다. 이것은 옳지 않습니다. ?: 삼항 연산자인 경우 피연산자가 3개 있어야 합니다. 그 이유는 일반적으로 현재 언어에서 유일한 삼항 연산자이기 때문입니다.

다음은 삼진법이 무엇인지, 어떻게 사용하는지, 언제 사용해야 하는지, 왜 사용하는지, 언제 사용하지 말아야 하는지 소개합니다.

삼항 연산자란 무엇인가요?

🎜? :ifelse의 약어입니다. 중간에 "삼항 연산자"에 대한 공식적인 설명이 있습니다. 🎜🎜🎜PHP 5.3🎜부터:🎜
🎜PHP 5.3부터 삼항 연산자의 중간 부분을 생략할 수 있습니다. expr1 ?: expr3 표현식은 expr1이 TRUE이면 expr1을 반환하고 그렇지 않으면 expr3을 반환합니다. 🎜
🎜🎜PHP 7.0🎜🎜
🎜PHP 7에는 새로운 Null 병합 연산자가 있습니다. 이는 "isset 삼항 연산자"라고도 알려진 삼항 연산자와 동일합니다. 이는 연결된 삼항 산술에서 isset()을 제거합니다. 🎜
🎜PHP 5에서는 존재하지 않는 변수에 삼항 연산자를 사용하는 경우 삼항 문 시작 부분에 isset()을 사용해야 합니다. 🎜rrreee🎜PHP 7에서는 다음과 같이 할 수 있습니다. 🎜rrreee🎜Null 병합 연산자는 빈 문자열을 처리할 수 없다는 점을 기억하세요. 체인에서 이를 사용하여 여러 변수를 확인할 수 있습니다. 🎜rrreee🎜 PHP에서는 관리자가 로그인 시스템 테스트를 위해 사용자인 척하는 경우가 많습니다. 위와 같이 사용자가 다른 사용자를 사칭하지 않고 로그인하지 않은 경우에는 게스트가 됩니다. 그래도 이해가 되지 않는다면 삼항 연산자가 무엇인지, 어떻게 사용하는지 계속해서 읽어보세요. 그런 다음 새로운 PHP🎜🎜🎜🎜에서 삼항 연산자를 사용하는 방법을 살펴보겠습니다. 🎜🎜🎜🎜일반적인 if 문은 다음과 같습니다. 🎜rrreee🎜삼항 연산자를 사용하여 단순화합니다. 🎜rrreee🎜 짧지만 이해하기가 더 어렵습니다. 이는 위와 같이 $var 변수에 사용할 수 있을 뿐만 아니라 변수가 false인지 확인하기 위해 아래와 같이 echo에 사용할 수도 있습니다. 🎜rrreee🎜🎜🎜 왜 사용하고 싶나요? 🎜🎜🎜🎜삼항 연산이 매력적인 것 같아요. 일부 개발자는 성능을 원하지만 삼항 연산자는 특히 PHP 5.4의 최신 짧은 에코와 같은 다른 기능과 결합될 때 🎜멋집니다🎜. 예) 서버 측 로직을 사용하려면 삼항 연산자나 다른 짧은 문장을 사용하는 것이 가장 좋은 방법이 될 것입니다. "다른 짧은 문장", 예: 🎜rrreee🎜참고로 저는 개인적으로 이렇게 의미 없는 짧은 문장을 좋아하지 않습니다. 🎜🎜🎜🎜삼항 연산자는 얼마나 빠른가요? 🎜🎜🎜🎜사람들은 미세 최적화를 좋아합니다. 이것도 완료되었습니다. 따라서 일반 if / else 문보다 삼항 연산이 얼마나 빠른지 아는 것이 중요합니다. 🎜🎜기사를 통해 약 0.5ms 더 빠르다고 배웠습니다. 이것은 이미 훨씬 빠릅니다! 🎜🎜잠깐만, 그렇지 않아요. 이 결론은 한 줄의 코드에서 수천 번의 작업을 반복적으로 수행함으로써 나온 것입니다. 그러니 전혀 걱정하지 마십시오. 그것은 무의미합니다. 🎜🎜🎜🎜사용할 수 없는 삼항 연산자🎜🎜🎜🎜코드는 다음과 같아야 합니다.🎜
    🎜읽기 쉬움🎜🎜이해하기 쉬움🎜🎜수정하기 쉬움🎜🎜🎜분명히 이는 코딩 능력과 이러한 유형의 코드에 대한 이해에 달려 있습니다. .문제 이해 능력. 이전의 간단한 예시에서는 문제가 없지만 다음은 🎜나쁜🎜입니다. 🎜rrreee🎜이유는 다음과 같습니다. 🎜
      🎜삼항 중첩이 너무 깁니다🎜🎜스위치를 사용하면 됩니다. code> 문🎜 🎜첫 번째는 주황색이어야 합니다🎜🎜🎜🎜🎜Summary🎜🎜🎜🎜3항 연산은 실제로 매우 간단하므로 두려워할 필요가 없습니다. 🎜어떤🎜속도 증가도 없다고 생각하지 마세요. 실제로는 아무런 차이도 없습니다. 결과를 🎜단순🎜, 🎜보기 좋게🎜할 수 있고 항상 코드를 읽을 수 있는 상태로 유지할 수 있을 때 사용하세요. 삼항 연산자 없이 삼항 연산자를 사용하지 마세요. 🎜🎜추천 학습: "🎜PHP 비디오 튜토리얼🎜"🎜

위 내용은 사용법을 이해하기 위한 PHP의 '?:' 연산자에 대한 심층 분석!의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:learnku.com
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿