PHP 三元 !empty 而不是評估為真或假 可用isset()

是否可以使用速記三元來檢查變量是否已設置,而不是是否計算結果為零或非零?

例如,我試過:

$var = 0;
echo (string) $var ?: (string) false ?: 2;

但由于前兩個表達式的計算結果均為“0”或“false”,因此顯示為 2。

我認為也許將它們轉換為字符串會產生不同的結果,但事實并非如此。我想零就是零。

我想在分配變量時使用這種樣式,例如

$get->var = $get->var ?: $setindb ?: $default;

如果設置了$get->var,我想將$get->var分配給$get->var,否則,檢查db是否有值,否則,使用默認值。

我想我會提到我知道我可以做類似的事情

$get->var = (!empty($get->var)) ? $get->var : ( (!empty($setindb)) ? $setindb : $default )

但你來判斷哪個更簡單:)

【問題討論】:

  • 為什么不使用 isset($get->var) 代替?

  • 好吧,在我上面的例子中,不是空的, isset 會更合適,但這仍然讓我處于同樣的情況。我一直在尋找一種更清潔、更簡單的方法。

【解決方案1】:

字符串“0”和“false”在 PHP 中被視為?FALSE-y (list of false values) 值。

isset()?為已設置的變量返回?TRUE?而不是?NULL。?empty()?將檢查變量是否已設置,并且該變量不是?FALSE?值。所以它會為“0”返回TRUE

我認為你想要的是你的第三個代碼 sn-p,但使用isset(),而不是empty()

最簡單的方法(使用最少的括號)是:

$get->var = isset($get->var) ? $get->var : (isset($setindb) ? $setindb : $default);

由于速記三元返回第一個參數,你不能使用它,因為那將是一個布爾值。 (isset($get->var) ?: $default?將返回?TRUEFALSE?或?$default,但絕不會返回?$get->var?的值。)


編輯:也許你想要一個像合并函數這樣的東西?據我所知,PHP 本身并不提供它,但創建起來很簡單。請注意,這可能有點難看,因為它使用傳遞對函數的引用。我會對這方面的 cmets 感興趣(它有我想的那么糟糕嗎?)。

function coalesce(array $values)
{foreach($values as &$value){if(isset($value))return $value;}return null;
}
$this->var = coalesce(array(&$this->var, &$setindb, $default));

我還沒有測試過上述內容。將數組中的變量作為引用傳遞(&?符號)。我很確定它會被?coalesce(array(1,"a_string",false));?這樣的東西窒息。

【討論】:

  • 好的,不知道是否有一些技巧(比如強制轉換)三元會檢查除真假以外的技巧

empty()和isset()的區別及應用場景:

a.當判斷一個變量是否定義時,可用isset();

應用:表單提交時用isset($_POST['submit'])的值來判定是否提交表單。

b.當判斷一個變量是否為空時(不需要知道其是否賦值),可用empty();

應用:表單驗證時,需驗證必填項值是否為空。

c.當判斷一個變量已經存在且不為空,可先用isset(),再用empty();

應用:文件上傳時,需判斷$_FILES已賦值,且不為空。
?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/42764.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/42764.shtml
英文地址,請注明出處:http://en.pswp.cn/news/42764.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

如何建立單元測試

快速開始 zixun-quickstart-mk3生成的項目已經配置好了基礎的BaseTest,各個測試類只需要繼承BaseTest就可以開始進行單元測試的編寫了。 如何進行Mock 為了保證獨立性和可重復執行,所有的外部依賴都需要進行Mock,SpringTest引入了Mockito作為單測Mock組件, Mickito官方文…

vue2中使用unocss,在ie11 不能正常顯示unocss的顏色設置

前景 ie11 不能正常顯示unocss的顏色設置:“–un-text-opacity: 1 !important; color: rgba(213,147,197,var(–un-text-opacity));” IE11 目前是無法支持 CSS 變量(自定義屬性)和 rgba 中使用的 var() 函數。 為了在 IE11 中使用 UnoCSS…

前端基礎(JavaScript語法)

前言:今天學習JavaScript的基本語法,包括變量、函數、對象、數組。 目錄 JavaScript 變量 函數 對象 數組 JavaScript 變量 定義變量 判斷語句 判斷等于: 判斷不等于:! if else語句 if(vavb){ console.log("…

springboot 整合swagger 入門 使用

1.前提 一定要看好版本。 Springboot ? Swagger各版本整理_swagger版本_qq_33334411的博客-CSDN博客 我的版本: <dependency><groupId>io.springfox</groupId><artifactId>springfox-boot-starter</artifactId><version>3.0.0</ver…

前饋神經網絡正則化例子

直接看代碼&#xff1a; import torch import numpy as np import random from IPython import display from matplotlib import pyplot as plt import torchvision import torchvision.transforms as transforms mnist_train torchvision.datasets.MNIST(root…

Docker:Windows container和Linux container

點擊"Switch to Windows containers"菜單時&#xff1a; 提示 然后 實際上是運行&#xff1a;com.docker.admin.exe start-service

成集云 | 樂享問題邀請同步企微提醒 | 解決方案

源系統成集云目標系統 方案介紹 騰訊樂享是騰訊公司開發的一款企業社區化知識管理平臺&#xff0c;它提供了包括知識庫、問答、課堂、考試、活動、投票和論壇等核心應用。這個平臺凝聚了騰訊10年的管理經驗&#xff0c;可以滿足政府、企業和學校在知識管理、學習培訓、文化建…

【gitkraken】gitkraken自動更新問題

GitKraken 會自動升級&#xff01;一旦自動升級&#xff0c;你的 GitKraken 自然就不再是最后一個免費版 6.5.1 了。 在安裝 GitKraken 之后&#xff0c;在你的安裝目錄&#xff08;C:\Users\<用戶名>\AppData\Local\gitkraken&#xff09;下會有一個名為 Update.exe 的…

Linux環境變量

環境變量 一.基本概念二.常見的環境變量1.PATH&#xff1a;指令搜索路徑2.HOME&#xff1a; 指定用戶的主工作目錄3.SHELL&#xff1a;當前Shell,它的值通常是/bin/bash 三.查看環境變量的方法四.命令行參數五.環境變量增加和刪除六.本地變量 一個問題&#xff1a;我們在寫一段…

Kotlin~Bridge橋接模式

概念 抽象和現實之間搭建橋梁&#xff0c;分離實現和抽象。 抽象&#xff08;What&#xff09;實現&#xff08;How&#xff09;用戶可見系統正常工作的底層代碼產品付款方式定義數據類型的類。處理數據存儲和檢索的類 角色介紹 Abstraction&#xff1a;抽象 定義抽象接口&…

《Go 語言第一課》課程學習筆記(五)

入口函數與包初始化&#xff1a;搞清 Go 程序的執行次序 main.main 函數&#xff1a;Go 應用的入口函數 Go 語言中有一個特殊的函數&#xff1a;main 包中的 main 函數&#xff0c;也就是 main.main&#xff0c;它是所有 Go 可執行程序的用戶層執行邏輯的入口函數。 Go 程序在…

一起創建Vue腳手架吧

目錄 一、安裝Vue CLI1.1 配置 npm 淘寶鏡像1.2 全局安裝1.3 驗證是否成功 二、創建vue_test項目2.1 cmd進入桌面2.2 創建項目2.3 運行項目2.4 查看效果 三、腳手架結構分析3.1 文件目錄結構分析3.2 vscode終端打開項目 一、安裝Vue CLI CLI&#xff1a;command-line interface…

日常BUG——微信小程序提交代碼報錯

&#x1f61c;作 者&#xff1a;是江迪呀??本文關鍵詞&#xff1a;日常BUG、BUG、問題分析??每日 一言 &#xff1a;存在錯誤說明你在進步&#xff01; 一、問題描述 在使用微信小程序開發工具進行提交代碼時&#xff0c;報出如下錯誤&#xff1a; Invalid a…

Git提交規范指南

在開發過程中&#xff0c;Git每次提交代碼&#xff0c;都需要寫Commit message&#xff08;提交說明&#xff09;&#xff0c;規范的Commit message有很多好處&#xff1a; 方便快速瀏覽查找&#xff0c;回溯之前的工作內容可以直接從commit 生成Change log(發布時用于說明版本…

5、flink任務中可以使用哪些轉換算子(Transformation)

1、什么是Flink中的轉換算子 在使用 Flink DataStream API 開發流式計算任務時&#xff0c;可以將一個或多個 DataStream 轉換成新的 DataStream&#xff0c;在應用程序中可以將多個數據轉換算子合并成一個復雜的數據流拓撲圖。 2、常用的轉換算子 Flink提供了功能各異的轉換算…

[論文筆記]ON LAYER NORMALIZATION IN THE TRANSFORMER ARCHITECTURE

引言 這是論文ON LAYER NORMALIZATION IN THE TRANSFORMER ARCHITECTURE的閱讀筆記。本篇論文提出了通過Pre-LN的方式可以省掉Warm-up環節,并且可以加快Transformer的訓練速度。 通常訓練Transformer需要一個仔細設計的學習率warm-up(預熱)階段:在訓練開始階段學習率需要設…

JDK 1.6與JDK 1.8的區別

ArrayList使用默認的構造方式實例 jdk1.6默認初始值為10jdk1.8為0,第一次放入值才初始化&#xff0c;屬于懶加載 Hashmap底層 jdk1.6與jdk1.8都是數組鏈表 jdk1.8是鏈表超過8時&#xff0c;自動轉為紅黑樹 靜態方式不同 jdk1.6是先初始化static后執行main方法。 jdk1.8是懶加…

設置PHP的fpm的系統性能參數pm.max_children

1 介紹 PHP從Apache module換成了Fpm&#xff0c;跑了幾天突然發現網站打不開了。 頁面顯示超時&#xff0c;檢查MySQL、Redis一眾服務都正常。 進入Fpm容器查看日志&#xff0c;發現了如下的錯誤信息&#xff1a; server reached pm.max_children setting (5), consider r…

python中的svm:介紹和基本使用方法

python中的svm&#xff1a;介紹和基本使用方法 支持向量機&#xff08;Support Vector Machine&#xff0c;簡稱SVM&#xff09;是一種常用的分類算法&#xff0c;可以用于解決分類和回歸問題。SVM通過構建一個超平面&#xff0c;將不同類別的數據分隔開&#xff0c;使得正負樣…

2023全國大學生數學建模競賽A題B題C題D題E題思路+模型+代碼+論文

目錄 一. 2023國賽數學建模思路&#xff1a; 賽題發布后會第一時間發布選題建議&#xff0c;思路&#xff0c;模型代碼等 詳細思路獲取見文末名片&#xff0c;9.7號第一時間更新 二.國賽常用的模型算法&#xff1a; 三、算法簡介 四.超重要&#xff01;&#xff01;&…