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;
}

 

posted @ 2016-11-25 15:26  心随所遇  阅读(490)  评论(0编辑  收藏  举报