php foreach id是否存在數組_請糾正這 5 個 PHP 編碼小陋習

4ff93802b75231057d72f9cb968bb388.png

在做過大量的代碼審查后,我經常看到一些重復的錯誤,以下是糾正這些錯誤的方法。

在循環之前測試數組是否為空

$items = [];

// ...

if (count($items) > 0) {

foreach ($items as $item) {

// process on $item ...

}

}

foreach以及數組函數 (array_*) 可以處理空數組。

·????????不需要先進行測試

·????????可減少一層縮進

$items = [];

// ...

foreach ($items as $item) {

// process on $item ...

}

將代碼內容封裝到一個 if 語句匯總

functionfoo(User $user) {

if (!$user->isDisabled()) {

// ...

// long process

// ...

}

}

這不是 PHP 特有的情況,不過我經常碰到此類情況。你可以通過提前返回來減少縮進。

所有主要方法處于第一個縮進級別

functionfoo(User $user) {

if ($user->isDisabled()) {

return;

}

// ...

// 其他代碼

// ...

}

多次調用 isset 方法

你可能遇到以下情況:

$a = null;

$b = null;

$c = null;

// ...

if (!isset($a)|| !isset($b) || !isset($c)) {

throw newException("undefined variable");

}

// 或者

if (isset($a)&& isset($b) && isset($c) {

// process with $a, $b et $c

}

// 或者

$items = [];

//...

if (isset($items['user']) && isset($items['user']['id']) {

// process with $items['user']['id']

}

我們經常需要檢查變量是否已定義,php 提供了 isset 函數可以用于檢測該變量,而且該函數可以一次接受多個參數,所以一下代碼可能更好:

$a = null;

$b = null;

$c = null;

// ...

if (!isset($a,$b, $c)) {

throw newException("undefined variable");

}

// 或者

if (isset($a, $b,$c)) {

// process with$a, $b et $c

}

// 或者

$items = [];

//...

if (isset($items['user'], $items['user']['id'])) {

// process with$items['user']['id']

}

echosprintf方法一起使用

$name = "John Doe";

echo sprintf('Bonjour %s', $name);

看到這段代碼你可能會想笑,不過我的確這樣寫了一段時間,而且我仍然會看到很多這樣寫的!其實echo和sprintf并不需同時使用,printf就可以完全實現打印功能。

$name = "John Doe";

printf('Bonjour %s', $name);

通過組合兩種方法檢查數組中是否存在鍵

$items = [

'one_key' => 'John',

'search_key' => 'Jane',

];

if (in_array('search_key', array_keys($items))) {

// process

}

我經常看到的最后一個錯誤是in_array和array_keys的聯合使用。所有這些都可以使用array_key_exists替換。

$items = [

'one_key' => 'John',

'search_key' => 'Jane',

];

if (array_key_exists('search_key', $items)) {

// process

}

我們還可以使用isset來檢查值是否不是null。

if (isset($items['search_key'])) {

// process

}

697b1f6dca5e31453772e4fefd0b26e8.png

免責聲明:本文內容轉載自網絡,其版權和著作權屬于原作者。如果涉及侵權請盡快告知,我們將會在第一時間刪除原文鏈接:https://segmentfault.com/a/1190000024487379

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

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

相關文章

1161轉進制(C語言)

一:題目 二:思路分析 1.首先該題目讓我們使用遞歸求十進制轉其他進制 2.其次,我們要知道十進制轉換為其他進制怎么轉換,以例題所給的數據為例 由此圖可以看出,十進制轉換為其他進制,是輾轉相除法&#xf…

PHP異常處理

轉載鏈接:http://www.blogdaren.com/post-2030.html 版權聲明:除非注明,本文由( manon )原創,轉載請保留文章出處 本文鏈接:PHP register_shutdown_function函數詳解 腳本時常死掉,而且并不總是那么好看. 我們可不想…

應對無協議脫歐 葡萄牙機場將為英籍旅客設快速通道

中新網1月18日電 據臺灣《聯合報》援引英媒報道,英國首相特蕾莎?梅的脫歐協議遭下院否決后,英國無協議脫歐的可能性變大。葡萄牙總理科斯塔17日表示,里斯本當局正對機場開設特殊通道進行規劃,使英國旅客無論英國最后如何脫歐&…

javascript 日期控件

http://www.my97.net/dp/index.asp轉載于:https://www.cnblogs.com/Ken-Cai/archive/2010/04/08/1707080.html

6輪字節前端校招面試經驗分享

大家好,我是若川。最近金三銀四,今天分享一篇字節前端校招面試經驗的輕松好文,相信看完會有所收獲。也歡迎點擊下方卡片關注或者星標我的公眾號若川視野因為我錯過了2020年的秋招(ps: 那時候連數據結構與算法都還沒學完&#xff0…

redis存opc_Redis集群的三種模式

一、主從模式通過持久化功能,Redis保證了即使在服務器重啟的情況下也不會損失(或少量損失)數據,因為持久化會把內存中數據保存到硬盤上,重啟會從硬盤上加載數據。但是由于數據是存儲在一臺服務器上的,如果這臺服務器出現硬盤故障等…

斥資近1億港元,小米二次回購

1月21日消息,小米集團發布公告稱,公司于1月18日回購了984.96萬股B類普通股股票,占已發行股份0.041%,平均價為每股B類股10.1527港元,總計斥資近1億港元。 這也是繼1月17日首次回購后,小米集團連續兩日出手進…

MySQL日期數據類型、時間類型使用總結

轉載鏈接:http://www.jb51.net/article/23966.htm MySQL 日期類型:日期格式、所占存儲空間、日期范圍 比較。 日期類型 存儲空間 日期格式 日期范圍 ------------ --------- --------------------- -------------------------------…

ios macos_設計師可以從iOS 14和macOS Big Sur中學到什么?

ios macos重點 (Top highlight)With the introduction of iOS 14 and macOS Big Sur, we are the witness of the next big thing in UI Design. Changes are not so revolutionary like in iOS 7 years before, but they undoubtedly present the trend UI Designers will fol…

Web開發性能優化總結 轉載

1. 使用存儲過程, (如果在程序里用exec 存儲過程 參數,這樣執行似乎并沒有快多少) 在數據庫里是預編譯的,也不需要在字符串傳輸上花費大量時間。 防sql注入攻擊。 2. 盡量優化數據庫語句,使邏輯盡量…

金三銀四的騰訊、阿里、?字節等大廠前端社招面經

大家好,我是若川。最近金三銀四,今天分享一篇騰訊、阿里、字節等大廠的前端社招面試經驗的好文,相信看完會有所收獲。也歡迎點擊下方卡片關注或者星標我的公眾號若川視野作者面了將近一個月,目前還沒掛過,但由于各種因…

JS中創建函數的幾種方式

使用 "函數聲明" 創建函數 語法:* function 函數名([形參1,形參2...形參N]){* 語句...* } */function fun2(){console.log("這是我的第二個函數~~~");alert("哈哈哈哈哈");document.write("~~~~…

ssm提交post_我用spring mvc做,用post方式提交,后臺獲取不到參數值,用get方式就可以,什么問題...

展開全部因為form表單e68a843231313335323631343130323136353331333365646330的enctype編碼方式不同導致的;enctype 屬性規定在發送到服務器之前應該如何對表單數據進行編碼。默認地,表單數據會編碼為 "application/x-www-form-urlencoded"。就…

網頁設計簡約_簡約網頁設計的主要功能

網頁設計簡約重點 (Top highlight)Minimalism is synonymous with simplicity. Not quite. As the name suggests, minimalism is definitely not about opulent design. But the assumption that minimalism is design-less and plain is also wrong. Minimalism is simple ye…

MySQL_數據庫數據類型(data type)介紹

轉載鏈接:http://www.360sdn.com/mysql/2013/0511/78.html MySQL_數據庫數據類型(data type)介紹 mysql數據庫的數據類型(data type)分以下幾種:數值類型,字符串類型 一、數值類型 MySQL 的數值類型可以大致劃分為兩個類別,一個是整數,另一…

Expo 2010 Japan Pavilion

^_^轉載于:https://www.cnblogs.com/mmmhhhlll/archive/2010/04/16/1713680.html

深度對比學習Vue和React兩大框架

作為國內應用最廣的兩個框架,Vue 和 React 是前端必須掌握的內容,也是面試的重點。但大多數讀者都只擅長其中一個框架,當面試涉及到另一個框架的內容時,就答不好了。比如虛擬dom,兩個框架中都有應用,面試官…

PHP Token(令牌)設計

轉載鏈接:http://www.jb51.net/article/13756.htm PHP Token(令牌)設計 設計目標: 避免重復提交數據. 檢查來路,是否是外部提交 匹配要執行的動作(如果有多個邏輯在同一個頁面實現,比如新增,刪除,修改放到一個PHP文件里操作) 這里所說的token是在頁面顯示的時候,寫到…

java rwd_面向任務的設計-不僅限于Mobile First和RWD

java rwdWe already know that majority of solutions should start with a design for smartphones, we know that all websites should be responsive. Now, it’s time to think about holistic solutions with specific tasks adapted to all kind of devices.我們已經知道…

python中關鍵字 表示空類型_python中什么表示空類型

python中什么表示空類型?python中None表示空類型。表示該值是一個空對象,空值是Python里一個特殊的值,用None表示。None不能理解為0,因為0是有意義的,而None是一個特殊的空值。可以將None賦值給任何變量,也…