原创 Yii2 rules 自定義規則

  Yii2 提供了一套完善的參數校驗規則,但有時可能不滿足實際需求,需要我們自定義規則,這裏簡單介紹下自定義規則的使用。 比如有個參數 country ,只能接收 'USA', 'Web',其餘校驗不通過,代碼如下: public

原创 PHP遞歸的三種方式

一、利用引用做參數 PHP 的引用允許用兩個變量來指向同一個內容,例如 $a = &$b; 這意味着 $a 和 $b 指向了同一個變量。如下例子,因爲 $data 使用了引用傳遞,所以數據會一直累加。 function recursio

原创 緩存穿透、緩存併發和緩存雪崩筆記

緩存穿透、緩存併發和緩存雪崩是常見的由於併發量大而導致的緩存問題。這裏記錄下其產生原因和解決方案。 緩存穿透是由惡意攻擊或無意造成的;緩存併發是由設計不足造成的;緩存雪崩是由緩存同時失效造成的。   一、緩存穿透 概念: 緩存穿透指的是使

原创 使用PHP生成並導出CSV文件

CSV文件是以純文本形式存儲的,一般以逗號爲分隔符。 這裏主要簡單介紹下如何導出CSV文件。 一、瀏覽器導出CSV文件格式 /** * 導出CSV文件 */ function exportCsv() { // 需要導出

原创 MySQL中DISTINCT與GROUP BY計數原理分析

通常,我們要統計一個字段有幾種值有兩種方法:在語句中使用DISTINCT或者GROUP BY,配合count進行查詢。 例如: SELECT count(DISTINCT col) FROM table; SELECT count

原创 PHP設計模式—工廠模式之簡單工廠模式

定義: 簡單工廠模式:將調用者和創建者分離,實現解耦,調用者直接向工廠請求,通過工廠去選擇需要實例化的對象,用一個單獨的類來做這個創建實例的過程。 代碼實例: 問題:假設一個關於個人事務管理的項目中有許多類型的對象,其中一個是 A

原创 git rebase -i 合併多次提交

在實際開發中,經常會需要使用到git合併功能,git rebase可以將多個commit合併成爲一個。 這裏主要介紹一下git rebase -i命令的使用: 一、使用git bash命令行實現 1、先查看提交日誌,選擇需要合併的

原创 Yii2中indexBy()的使用

在項目開發中經常會使用到一些特殊的值作爲數組的索引,一般可以先查詢出數據後數組循環拼接成所需的格式。不過YII2框架提供了一種更簡單的方法indexBy()。 參考Yii文檔:https://www.yiichina.com/do

原创 PHP設計模式—工廠模式之抽象工廠模式

定義: 抽象工廠模式:提供一個創建一系列相關或相互依賴對象的接口,而無需指定他們的具體類。抽象工廠模式主要解決涉及到多個產品系列的問題。 代碼實例: 先回顧上一篇中工廠方法模式的例子,該示例以 BloggsCal 和 MegaC

原创 PHP使用遞歸按層級查找數據

今天主要介紹一下使用遞歸來按層級查找數據。 原理挺簡單的,主要是通過父級id一級一級的循環查找子級,使用PHP循環代碼也很容易實現,不過如果層級越多,PHP重複代碼也越多,這時可以使用遞歸來實現這功能。 1、首先查出要使用的數據組

原创 PhpStorm中實現git rebase -i 合併多次提交功能

上篇介紹到使用git bash命令行實現git rebase -i功能,本篇介紹一下使用PhpStorm編輯器如何實現git rebase -i 功能。 1、先選擇自己的分支,查看提交日誌,複製下需要合併的前一個commit版本號

原创 PHP中使用date獲取上月最後一天出現的問題

上次做項目時,發現一個問題,這裏記錄一下: 問題: 在使用date函數獲取上一個月最後一天或下個月最後一天時,如果當前日期是31號,獲取的數據有問題。 // 2019-12-01 正確應該是 2019-11-30 date('

原创 PHP設計模式—工廠模式之工廠方法模式

定義: 工廠方法模式:定義一個用於創建對象的接口,讓子類決定實例化哪一個類。工廠方法使一個類的實例化延遲到其子類。 代碼實例: 這裏還是接着上篇簡單工廠模式的那個例子,改成工廠方法模式。 1、創建一個抽象類 ApptEncoder

原创 PHP中根據概率實現隨機數

假設有四個選項:a 佔 10%,b佔 20% ,C佔 30% , d 佔 40% ,原理就是現獲取隨機數,然後找區間。 當然了,選項的數量可以任意。目前默認是總和是 100% 。如果需要別的數,修改隨機數的範圍即可。 這個算法,比

原创 Yii redis hash散列的使用

redis 的散列可以讓用戶將多個鍵值對存儲到一個 redis 鍵裏面。這裏介紹一些常用命令,以及在 Yii 中的使用。 HMGET HMGET:HMGET key-name key [key …] 從散列裏面獲取一個或多個鍵的