PHP实用的功能函数
1 /** 2 * 获取类/对象的方法列表 3 *@param unknown $argument 类/对象 4 *@param array|string $filter 过滤 5 *@return array 类似:[] 6 */ 7 8 function class_get_methods($argument, $filter = null){ 9 10 $filters = 0; 11 if(!empty($filter)){ 12 if(is_string($filter)) $filter = explode(',', preg_replace('/\s+/', '', $filter)); 13 $option = array( 14 'static'=>\ReflectionMethod::IS_STATIC, 15 'public'=>\ReflectionMethod::IS_PUBLIC, 16 'protected'=>\ReflectionMethod::IS_PROTECTED, 17 'private'=>\ReflectionMethod::IS_PRIVATE, 18 'abstract'=>\ReflectionMethod::IS_ABSTRACT, 19 'final'=>\ReflectionMethod::IS_FINAL, 20 ); 21 22 foreach($filter as $value){ 23 $filters = $filters | $options[$value]; 24 } 25 } 26 27 $class = new \ReflectionClass($argument); 28 $ReflectionMethods = empty($filters)? $class->getMethods() : $class->getMethods($filters); 29 $methods = []; 30 foreach($ReflectionMethods as $ReflectionMethod){ 31 32 $function = new ReflectionMethod($ReflectionMethod->class, $ReflectionMethod->name); 33 //取得参数列表 34 $parameters = $function->getParameters(); 35 foreach($parameters as $parameter){ 36 $aaa[$ReflectionMethod->name][] = '$'.$parameter->name; 37 } 38 if(isset($aaa[$ReflectionMethod->name])) 39 $methods[] = $ReflectionMethod->name . '('. implode(', ', $aaa[$ReflectionMethod->name]) .' )'; 40 else 41 $methods[] = $ReflectionMethod->name . '()'; 42 } 43 return $methods; 44 45 }
来源:当初学phalcon框架时,没有php源码,不知道对象有哪些方法,及使用时传递什么参数.
示例:p(class_get_methods('Exception'));
1 /** 2 * 计算薪资范围属于哪些区间 3 *@param string $range 范围 4 *@param array|string $intervals 区间 5 *@return NULL|array 匹配的区间 6 */ 7 function interval($range, $intervals){ 8 9 if(is_string($intervals)) $intervals = [$intervals]; 10 11 $range = explode('-', $range); 12 $result = null; 13 foreach($intervals as $key => $value){ 14 15 $interval = explode('-', $value); 16 if($interval[0] < $range[0] && $range[0] <= $interval[1]){ 17 $result[] = $value; 18 }else if($range[0] < $interval[0] && $interval[0] < $range[1]){ 19 $result[] = $value; 20 } 21 22 } 23 24 return $result; 25 26 }
来源:在招聘网站上通过薪资范围进行筛选时,发现并不准确,感觉这确实是个算法问题于是,自己实现了一下.
示例:
$range = '6-23';
$intervals = ['3-5', '5-10', '10-15', '15-20', '20-25', '25-30' ];
p('范围:' . $range, '区间:', $intervals, '结果:', interval($range, $intervals));
1 /** 2 * 打印数据 3 * $args 参数列表 4 */ 5 function p($args = ''){ 6 7 $args = func_get_args(); 8 $count = func_num_args(); 9 if($count == 0) $args = ['#----mark here----#']; 10 11 if(in_array($args, ['@post', '@get'])) { 12 if($args == '@post') $args = $_POST; 13 if($args == '@get') $args = $_GET; 14 } 15 16 $ajax = (isset($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') ? true : false; 17 if(!$ajax) echo '<pre style="background:#efefef;padding:5px 0 0 5px;border: 1px solid #aaa;">'; 18 foreach($args as $key => $data){ 19 if (is_bool($data)) { 20 $data = $data? '#true' : '#false'; 21 }elseif(empty($data)){ 22 if(is_null($data)) $data = '#null'; 23 if($data === '') $data = '#empty'; 24 } 25 if($data instanceof \Exception){ 26 $data = ['Class'=>get_class($data), 'Message' => $data->getMessage() . ' (' .$data->getCode() .')', 'File'=>$data->getFile() . ' (' .$data->getLine() .')']; 27 } 28 29 if($ajax){ 30 echo "\r\n"; print_r($data); echo "\r\n"; 31 }else{ 32 print_r($data); 33 if($key != $count - 1) echo '<hr/>'; 34 } 35 } 36 if(!$ajax) echo '</pre><br/>'; 37 }
来源:p函数是自己写的代替print_r的.
示例:上面也看到了它如此好用.
1 /** 2 * 读取sql标准的文件 3 *@param string $file 文件 4 *@param boolean $toarray 是否返回数组 5 *@return string|array 6 */ 7 function getSql($file, $toarray = false){ 8 9 $content = preg_replace(['/[\r|\n]+\s?(((--\s+|#).*)|\/\*(.|\n)*\*\/)/', '/[\r|\n]+/'], '', file_get_contents($file)); 10 if($toarray) $content = array_filter(explode(';', $content)); 11 return $content; 12 }
来源:项目开发时,会初始化一些表数据,每次都手动添加或修改,很麻烦.于是想到把处理好的表数据导出为sql文件,每次代码测试时,都把表数据初始化一遍.
1 /** 2 * 发送HTTP请求方法 3 * @param string $url 请求URL 4 * @param array $data 发送数据 5 * @param string $method 请求方法 6 */ 7 function curl($url, $data=[], $method='get', $options=[]){ 8 9 $options += array(CURLOPT_URL=>$url, CURLOPT_TIMEOUT=>30, CURLOPT_RETURNTRANSFER=>true, CURLOPT_SSL_VERIFYPEER=>false); 10 if(!empty($data)) $options[CURLOPT_POSTFIELDS] = $data; 11 $options[CURLOPT_CUSTOMREQUEST] = strtoupper($method); 12 13 $ch = curl_init(); 14 curl_setopt_array($ch, $options); 15 $data = curl_exec($ch); 16 $error = curl_error($ch); 17 curl_close($ch); 18 return $error? false : $data; 19 20 }
/** * 文本文件转数组: * 文件内容: 北京 111 天津 222 * @param unknown $content 文件路径或文本内容 * @return multitype: */ function text2array($content){ if(is_file($content)) $content = file_get_contents($content); $content = array_filter(explode("\r\n", trim($content))); foreach($content as $value){ $data[] = array_values(array_filter(explode(' ', $value))); } return $data; }