複製代碼 代碼如下:<?php
/**
* @author Yuans
* @copyright php.com
* @package 函數的常用使用方法及特性.
*/
# 基礎函數編寫注意點.
// 為了方便ide的管理及代碼提示功能,我們在所有函數命名時使用fun_開頭.
function fun_cutstr($str,$str_width=0,$str_pad='...'){
// 每個函數都得考慮一些異常的情況, 比如函數引入不對, 為0,為false等.
// 由於外部期望返回截取字元後的字元,所以就算此函數不工作,也應該將它傳進來的值給返回.
if(empty($str) === true || empty($str_width) === true)
return $str;
// 參數過濾
$str_width += 0;
// 保持一個原則, 盡量不要去汙染原始參數,
$return_str = mb_strcut($str,0,$str_width,'utf-8');
// 加強判斷, 如果return_str無法有值,由於是mb函數,許多伺服器會無法執行.
if(empty($return_str) === false){
return $return_str.$str_pad;
}else{
return $str;
}
}
echo fun_cutstr('aaaaaaaaaaaaaaaaaaaaaaaa',5); // out disply: "aaaaa...";
# 由於是utf-8編碼, 所以每個漢字為4位元組, 此處將返回"我是...";
echo fun_cutstr('我是個技術工作者',8);
# 或者我們需要考慮對函數的嚴重破壞,比如如下函數
echo fun_cutstr(false); //out: false
echo fun_cutstr('tbbbbbbbbs','aaaaaaaa'); // out: tbbbbbbbbs
echo fun_cutstr('','aaaaaaaa'); //out: empty
?>
PHP函數的一些基礎知識
A: 跟變數命名一樣,不可以內建函數名,不可以用數字來命名函數.
B: 重複調用性.
C: 支援靜態元素.
D: 支援不固定參數
個人建議技術員對函數做如下規範:
A: 函數名建立分類首碼, 比如字元型的就str_xxx, 布爾型的就 bool_xxxx, 公用函數就 open_xxx 應用型的函數就 APP_xxxx, 臨時型的就 temp_xxx
B: 函數的第一步請先判斷, 雖然有時自己知道一定會傳入某個類型的參數,但作為標準化來說, 先判斷再處理是為了程式的健壯也是為了安全.
C: 不要汙染原始變數, 如果你有項目經驗,有debug應用經驗,你就會明白.
D: 引用函數盡量少用,佔用記憶體非常大,損耗嚴重.
E:不要用大寫來編寫代碼, 不要覺得很cool.
F: 過份產生函數是一種退步的方式, 你可以思考著是否具有重複性, 是否需要封裝性, 隨意將過程封成函數不是明智之舉.
G: 寫好你的函數注釋. 複製代碼 代碼如下:<?php
$b = &fun_cutstr('aaaaaaaaaaaaaaaaaaaaaaaa',5); // out disply: "aaaaa...";
fun_cutstr('cccccccccccccccccc',5);
echo $b;
?>
引用函數將在php 5.3版本上無法正常運行, 6.0也最終將其拋棄, 理論上講echo $b,將會返回ccccc...
$b引入了函數的地址, 為此函數的任何改變都會被賦值給$b.
當然這些真的可以很少用, 不必太在意,特別是新學習者.
靜態函數如下表示: 複製代碼 代碼如下:<?php
/**
* @author Yuans
* @copyright php.com
* @package 函數的常用使用方法及特性.
*/
# 靜態函數編寫注意點.
function fun_static(){
static $a = 1;
echo $a ++;
}
fun_static();
fun_static();
fun_static();
?>
static $a = 1; 僅會在第一次調用函數時執行, 表明它是個靜態, 第二次執行時, $a變數就是取回靜態值, 而不會去執行$a = 1的賦值.如此類推, 數值不停地相加.<BR>