PHP學習筆記 12 程式之外

2022-03-10 16:19:08 字數 2243 閱讀 4087

好久沒有寫部落格了,最近在做乙個專案.其中遇到很多東西.總結一下.寫個部落格.(北京啊北京.你怎麼就把春天給弄丟了呢.好熱啊有木有)

首先一點,對於需求的理解

假如我們目前有這麼個很簡單的需求.有個產品過來和你說.給我寫乙個大小寫字母轉換的函式.我要傳入大寫或小寫字母.然後幫我轉換成都是大寫或者小寫.這個聽上去其實挺簡單的啊.不就乙個函式,入參是個字串.帶個模式.返回大寫或者小寫字母唄.此時函式的模型已經在腦袋裡面形成了.當聽到這些話的時候,腦袋裡面的模型大概是這個樣子的.

function changestr($str,$type =1)

return implode($newarr,'');

}

其實上面這個函式已經能夠實現需求了.但是有很多地方 .我們還需要再考慮.我們要對這個需求進行分析.有很多情況是需求上不能夠明確的.

在實際的使用中我們可能會遇到很多下面這種情況.

1,如果使用者沒有傳遞第二個引數.怎麼處理.如果使用者沒有傳遞任何引數,怎麼處理.

2,如果函式的使用過程中輸入的第乙個引數不是純大寫或者小寫字母會出現什麼情況,如果裡面混雜著漢字呢.

3,針對短的字串.我們可以用這個函式處理.如果使用者傳遞的字串非常長.函式如何處理.

我上面提到的問題,可能在需求文件裡面根本不會體現.很多事情是隱含在裡面的.這些問題要麼要口頭討論,要麼要乙個程式設計者自己去想辦法解決.

針對上面的問題.我修改了一下我的函式.修改之後大概是這個樣子的:

function changestr($str='',$type =1)

$str_arr = str_split($str,1);

$changenum = $type == 1?-32:32;//大小寫字母之間的assic2碼相差32

foreach($str_arr as $val)elseif(ord($val)>=97&&ord($val)<=122&&$type==1)elseif((ord($val)>=65&&ord($val)<=90)||(ord($val)>=97&&ord($val)<=122))else

} return implode($newarr,'');

}

這樣的話,這個函式就較之前好用多了.其實在工作中,總能遇到這樣的改動.因為作為乙個需求人員.他們可能不會考慮到你**書寫中的錯誤和漏洞.但是作為乙個編碼人員,我們需要為我們的**負責.所以就要能想多少想多少.當然,這裡面還有我沒有想到的.所以我們需要做的是在動手之前,就盡可能的吧可能的情況都盡量想到.才能實現更具有易用性的程式.

關於需求的變更,要如何應對

前幾天接到乙個需求,說頁面上有10個列表.每個列表對應乙個二級頁面.但是列表有2個是有特殊化處理的.讀取16條資料,其餘的是十條.拿到這個需求的時候,就開始設計程式要怎麼實現.我用了半天的時間想更好的實現方法.

本來我的方法想這樣寫 

function index()else

}}

但是這樣寫的話,如果有一天我想要再增加兩個特殊分類.那麼就要對我的程式動手術.這個時候.就很麻煩了.因為到底哪些分類需要被定義為特殊的分類.是需要經過市場的評估才能夠得到準確的結果的.所以如果我把程式寫成上面那個鳥樣子.那麼應對以後的需求變更.就不好弄了.於是我把程式寫成了下面這個樣子.

function index()else

}function getlist($total)

這樣的話,就能夠更好的應對以後的變更.如果需要新增特殊的分類.我只需要在分類陣列裡面新增即可.或者有更好的實現方法.就是這個陣列對應乙個分類表.我只要在特殊的分類上打個標籤.然後去資料庫查詢特殊的分類.那麼就可以吧這個做成乙個功能.

有一天乙個產品和我說.我現在想在這個列表頁面裡加兩個分類.但是不要二級頁面.

這個時候,如果你的分類導航是通過迴圈分類表裡面的資料得到的.那麼就很無奈.

--如果你把這兩個分類新增到分類裡面,那麼就會在分類導航裡面顯示出來.但是又要求這兩個分類不能在分類導航裡面顯示出來(因為沒有二級頁面).

--如果你不把這兩個分類新增進去,那麼就沒辦法根據分類去錄入.

好是尷尬如何是好.除了對模板的特殊化處理就沒有別的辦法了麼?當然有別的辦法.

如果我在設計分類表的時候,設計乙個字段叫做onshow(布林型).那麼我只需要在新增分類後將這個onshow設定為false,在從表中讀資料的時候,加上個判斷條件就ok 了.問題迎刃而解.

本來想多寫點,不過突然有事情.就先到這裡吧.

PHP學習筆記12(迴圈)

php迴圈 php中迴圈有4種 while迴圈 for迴圈 do while迴圈和foreach迴圈。while迴圈 while迴圈會一直執行 塊知道迴圈判斷條件不滿足為止。用法為 while 判斷條件 例如 a 5 while a 0 這段 將會輸出 543210。注 while語句在條件不成立的...

學習筆記12

sql server提供了兩種索引 聚集索引和非聚集索引。其中聚集索引表示表中儲存的資料按照索引的順序儲存,檢索效率比非聚集索引高,但對資料更新影響較大。非聚集索引表示資料儲存 在乙個地方,索引儲存在另乙個地方,索引帶有指標指向資料的儲存位置,非聚集索引檢索效率比聚集索引低,但對資料更新影響較小。聚...

Mysql 學習筆記(一)之 外來鍵

孔子曰 學而實習之 要想把知識變成自己的東西,必須得自己實際操作,閒話少說,本文以補習班表 sc class 學生表 sc student 來進行舉例。再說一遍 自己從頭動手做一遍!1.新建乙個資料庫。mysql create database school 2.新建乙個班級表 班級名稱 name ...