InitPHP (A PHP Framework) 用户手册
第6章 6.7.8 Function

接口描述:

提供丰富的公用类库。属于InitPHP框架扩展类,需要通过$this->getLibrary()方法获取

使用方法:

$function = $this->getLibrary('function'); 

实例:

class indexController extends Controller {
	
	public $initphp_list = array('test'); 
	
	public function run() {
		$function = $this->getLibrary('function');
		$function->trade_no(); //生成一个订单号
		$this->view->display(); //模板显示
	}
	
	public function test() {
		echo 'index.php?c=index&a=test 才会执行';
		$code = $this->getLibrary('code');
		$code->getcode();
	}
	
	
	/**
	 * @return testService
	 */
	private function getTestService() {
		return InitPHP::getService('test','test');
	}

}

具体类:

if (!defined('IS_INITPHP')) exit('Access Denied!');   
/*********************************************************************************
 * InitPHP 2.0 国产PHP开发框架  扩展类库-方法库
 *-------------------------------------------------------------------------------
 * 版权所有: CopyRight By initphp.com
 * 您可以自由使用该源码,但是在使用过程中,请保留作者信息。尊重他人劳动成果就是尊重自己
 *-------------------------------------------------------------------------------
 * $Author:zhuli
 * $Dtime:2011-10-09 
***********************************************************************************/
class functionInit {

	/**
	 * 方法库-获取随机值
	 * @return string  
	 */
	public function get_rand($str, $len) {
		return substr(md5(uniqid(rand()*strval($str))),0, (int) $len);
	}
	
	/**
	 * 方法库-获取随机Hash值 
	 * @return string
	 */
	public function get_hash($length = 13) { 
		$chars = '0123456789abcdefghijklmnopqrstuvwxyz';
    	$max = strlen($chars) - 1;
    	mt_srand((double)microtime() * 1000000);
		for ($i=0; $i<$length; $i++) {
			$hash .= $chars[mt_rand(0, $max)];
		}
		return $hash;
	}
	
	/**
	 * 方法库-截取字符串-【该函数作者未知】
	 * @param string  $string 字符串  
	 * @param int     $length 字符长度
	 * @param string  $dot    截取后是否添加...
	 * @param string  $charset编码
	 * @return string
	 */
	public function cutstr($string, $length, $dot = ' ...', $charset = 'utf-8') {
		if (strlen($string) <= $length) {
			return $string;
		}
		$string = str_replace(array('&', '"', '<', '>'), array('&', '"', '<', '>'), $string);
		$strcut = '';
		if (strtolower($charset) == 'utf-8') {
			$n = $tn = $noc = 0;
			while ($n < strlen($string)) {
				$t = ord($string[$n]);				//ASCIIֵ
				if($t == 9 || $t == 10 || (32 <= $t && $t <= 126)) {
					$tn = 1; $n++; $noc++;
				} elseif (194 <= $t && $t <= 223) {
					$tn = 2; $n += 2; $noc += 2;
				} elseif (224 <= $t && $t < 239) {
					$tn = 3; $n += 3; $noc += 2;
				} elseif (240 <= $t && $t <= 247) {
					$tn = 4; $n += 4; $noc += 2;
				} elseif (248 <= $t && $t <= 251) {
					$tn = 5; $n += 5; $noc += 2;
				} elseif ($t == 252 || $t == 253) {
					$tn = 6; $n += 6; $noc += 2;
				} else {
					$n++;
				}
				if($noc >= $length) {
					break;
				}
			}
			if ($noc > $length) {
				$n -= $tn;
			}
			$strcut = substr($string, 0, $n);
		} else {
			for ($i = 0; $i < $length; $i++) {
				$strcut .= ord($string[$i]) > 127 ? $string[$i].$string[++$i] : $string[$i];
			}
		}
		$strcut = str_replace(array('&', '"', '<', '>'), array('&', '"', '<', '>'), $strcut);
		return $strcut.$dot;
	}
	
	/**
	 * 方法库-字符串是否存在
	 * @param string $str :字符或字符串
	 * @param string $string :字符串
	 * @return string 例子: $str='34' $string='1234' 返回 TRUE
	 */
	public function is_str_exist($str, $string) {
		$string = (string) $string;
		$str = (string) $str;
		return strstr($string,$str)===false ? false : true;
	}
	
	/**
	 * 方法库-token使用
	 * @param string $type :encode-加密方法|decode-解密方法
	 * @return string|bool
	 */
	public function token($type = 'encode') {
		session_start();
		if ($type == 'encode') {
			$key = $this->get_hash(5);
			$_SESSION['init_token'] = $key;
			return '';
		} else {
			$value = trim($_POST['init_token']);
			if ($value !== $_SESSION['init_token']) return false;
			return true;
		}
	}
	
	/**
	 * 方法库-压缩函数,主要是发送http页面内容过大的时候应用
	 * @param string $content 内容
	 * @return string
	 */
	public function gzip(&$content) {
		if(!headers_sent()&&extension_loaded("zlib")&&strstr($_SERVER["HTTP_ACCEPT_ENCODING"],"gzip")){
			$content = gzencode($content,2);
			header("Content-Encoding: gzip");
			header("Vary: Accept-Encoding");
			header("Content-Length: ".strlen($content));
		}
		return $content;
	}
	
	/**
	 * 方法库-向父串中插入子串
	 * @param string $string  : 父串
	 * @param number $sublen  : 长度
	 * @param string $str     : 子串
	 * @param string $code    : 编码
	 * @return string
	 */
	public function insert_str($string, $sublen=10, $str="
", $code='UTF-8'){ if ($code == 'UTF-8') { $pa ="/[\x01-\x7f]|[\xc2-\xdf][\x80-\xbf]|\xe0[\xa0-\xbf][\x80-\xbf]|[\xe1-\xef][\x80-\xbf][\x80-\xbf]|\xf0[\x90-\xbf][\x80-\xbf][\x80-\xbf]|[\xf1-\xf7][\x80-\xbf][\x80-\xbf][\x80-\xbf]/"; preg_match_all($pa, $string, $t_string); $n = count($t_string[0]); $floor = ceil($n / $sublen); if ($n > $sublen) { for ($i=0; $i < $floor; $i++) { array_splice($t_string[0], ($sublen * ($i+1))-1, 0, $str); } return implode('', $t_string[0]); } else { array_splice($t_string[0], $sublen, 0); return implode('', $t_string[0]); } } } /** * 方法库-加密解密函数 * @param string $string 加密的字符串 * @param number $key 加密的密钥 * @param string $type 加密的方法-ENCODE|加密 DECODE|解密 * @return string */ public function str_code($string, $key, $type = 'ENCODE') { $string = ($type == 'DECODE') ? base64_decode($string) : $string; $key_len = strlen($key); $key = md5($key); $string_len = strlen($string); for ($i=0; $i<$string_len; $i++) { $j = ($i * $key_len) % 32; $code .= $string[$i] ^ $key[$j]; } return ($type == 'ENCODE') ? base64_encode($code) : $code; } /** * 方法库-输出钱的格式 * @param string $num 数值 * @return string */ public function format_number($num){ return number_format($num, 2, ".", ","); } /** * 方法库-字节转换-转换成MB格式等 * @param string $num 数值 * @return string */ public function bitsize($num) { if(!preg_match("/^[0-9]+$/", $num)) return 0; $type = array( "B", "KB", "MB", "GB", "TB", "PB" ); $j = 0; while($num >= 1024) { if( $j >= 5 ) return $num.$type[$j]; $num = $num / 1024; $j++; } return $num.$type[$j]; } /** * 方法库-数组去除空值 * @param string $num 数值 * @return string */ public function array_remove_empty(&$arr, $trim = true) { if (!is_array($arr)) return false; foreach($arr as $key => $value){ if (is_array($value)) { self::array_remove_empty($arr[$key]); } else { $value = ($trim == true) ? trim($value) : $value; if ($value == "") { unset($arr[$key]); } else { $arr[$key] = $value; } } } } /** * 生成 options html 代码 * @param array $arr 健值数组 * @param string $default 默认值 * @return string htmlcode */ function generateHtmlOptions($arr, $default = null){ $string = ''; if (!is_array($arr) && count($array)) return $string; foreach ($arr as $key => $val) { $selected = ($default == $key) ? 'selected' : ''; $string .= ''; } return $string; } /** * 清空数组中的空值 * @param array $array * @return array */ public function clear_array_null(&$array) { foreach($array as $k => $v){ if(empty($v)) unset($array[$k]); } return $array; } /** * 左边清空 * @param string $string * @return string */ public function rltrim($string) { if (is_string($string)) return trim($string); foreach($string as $k => $v){ $string[$k] = trim($v); } return $string; } /** * 生成唯一的订单号 20110809111259232312 * 2011-年日期 * 08-月份 * 09-日期 * 11-小时 * 12-分 * 59-秒 * 2323-微秒 * 12-随机值 * @return string */ public function trade_no() { list($usec, $sec) = explode(" ", microtime()); $usec = substr(str_replace('0.', '', $usec), 0 ,4); $str = rand(10,99); return date("YmdHis").round($usec).$str; } /** * 获取接受JS传递中文编码函数 * 作者:Min * @param string $str * @return string */ public function js_unescape($str){ $ret = ''; $len = strlen($str); for ($i = 0; $i < $len; $i++) { if ($str[$i] == '%' && $str[$i+1] == 'u') { $val = hexdec(substr($str, $i+2, 4)); if ($val < 0x7f) $ret .= chr($val); else if($val < 0x800) $ret .= chr(0xc0|($val>>6)).chr(0x80|($val&0x3f)); else $ret .= chr(0xe0|($val>>12)).chr(0x80|(($val>>6)&0x3f)).chr(0x80|($val&0x3f)); $i += 5; } else if ($str[$i] == '%') { $ret .= urldecode(substr($str, $i, 3)); $i += 2; } else $ret .= $str[$i]; } return $ret; } }