您的位置:首页 > 编程语言 > PHP开发

PHP实用的功能函数

2016-11-25 15:26 357 查看
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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: