/**
* 获取类/对象的方法列表
*@param unknown $argument 类/对象
*@param array|string $filter 过滤
*@return array 类似:[]
*/ function class_get_methods($argument, $filter = null){ $filters = 0;
if(!empty($filter)){
if(is_string($filter)) $filter = explode(',', preg_replace('/\s+/', '', $filter));
$option = array(
'static'=>\ReflectionMethod::IS_STATIC,
'public'=>\ReflectionMethod::IS_PUBLIC,
'protected'=>\ReflectionMethod::IS_PROTECTED,
'private'=>\ReflectionMethod::IS_PRIVATE,
'abstract'=>\ReflectionMethod::IS_ABSTRACT,
'final'=>\ReflectionMethod::IS_FINAL,
); foreach($filter as $value){
$filters = $filters | $options[$value];
}
} $class = new \ReflectionClass($argument);
$ReflectionMethods = empty($filters)? $class->getMethods() : $class->getMethods($filters);
$methods = [];
foreach($ReflectionMethods as $ReflectionMethod){ $function = new ReflectionMethod($ReflectionMethod->class, $ReflectionMethod->name);
//取得参数列表
$parameters = $function->getParameters();
foreach($parameters as $parameter){
$aaa[$ReflectionMethod->name][] = '$'.$parameter->name;
}
if(isset($aaa[$ReflectionMethod->name]))
$methods[] = $ReflectionMethod->name . '('. implode(', ', $aaa[$ReflectionMethod->name]) .' )';
else
$methods[] = $ReflectionMethod->name . '()';
}
return $methods; }

来源:当初学phalcon框架时,没有php源码,不知道对象有哪些方法,及使用时传递什么参数.

示例:p(class_get_methods('Exception'));

 /**
* 计算薪资范围属于哪些区间
*@param string $range 范围
*@param array|string $intervals 区间
*@return NULL|array 匹配的区间
*/
function interval($range, $intervals){ if(is_string($intervals)) $intervals = [$intervals]; $range = explode('-', $range);
$result = null;
foreach($intervals as $key => $value){ $interval = explode('-', $value);
if($interval[0] < $range[0] && $range[0] <= $interval[1]){
$result[] = $value;
}else if($range[0] < $interval[0] && $interval[0] < $range[1]){
$result[] = $value;
} } return $result; }

来源:在招聘网站上通过薪资范围进行筛选时,发现并不准确,感觉这确实是个算法问题于是,自己实现了一下.

示例:

$range = '6-23';
$intervals = ['3-5', '5-10', '10-15', '15-20', '20-25', '25-30' ];
p('范围:' . $range, '区间:', $intervals, '结果:', interval($range, $intervals));

 /**
* 打印数据
* $args 参数列表
*/
function p($args = ''){ $args = func_get_args();
$count = func_num_args();
if($count == 0) $args = ['#----mark here----#']; if(in_array($args, ['@post', '@get'])) {
if($args == '@post') $args = $_POST;
if($args == '@get') $args = $_GET;
} $ajax = (isset($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') ? true : false;
if(!$ajax) echo '<pre style="background:#efefef;padding:5px 0 0 5px;border: 1px solid #aaa;">';
foreach($args as $key => $data){
if (is_bool($data)) {
$data = $data? '#true' : '#false';
}elseif(empty($data)){
if(is_null($data)) $data = '#null';
if($data === '') $data = '#empty';
}
if($data instanceof \Exception){
$data = ['Class'=>get_class($data), 'Message' => $data->getMessage() . ' (' .$data->getCode() .')', 'File'=>$data->getFile() . ' (' .$data->getLine() .')'];
} if($ajax){
echo "\r\n"; print_r($data); echo "\r\n";
}else{
print_r($data);
if($key != $count - 1) echo '<hr/>';
}
}
if(!$ajax) echo '</pre><br/>';
}

来源:p函数是自己写的代替print_r的.

示例:上面也看到了它如此好用.

 /**
* 读取sql标准的文件
*@param string $file 文件
*@param boolean $toarray 是否返回数组
*@return string|array
*/
function getSql($file, $toarray = false){ $content = preg_replace(['/[\r|\n]+\s?(((--\s+|#).*)|\/\*(.|\n)*\*\/)/', '/[\r|\n]+/'], '', file_get_contents($file));
if($toarray) $content = array_filter(explode(';', $content));
return $content;
}

来源:项目开发时,会初始化一些表数据,每次都手动添加或修改,很麻烦.于是想到把处理好的表数据导出为sql文件,每次代码测试时,都把表数据初始化一遍.

 /**
* 发送HTTP请求方法
* @param string $url 请求URL
* @param array $data 发送数据
* @param string $method 请求方法
*/
function curl($url, $data=[], $method='get', $options=[]){ $options += array(CURLOPT_URL=>$url, CURLOPT_TIMEOUT=>30, CURLOPT_RETURNTRANSFER=>true, CURLOPT_SSL_VERIFYPEER=>false);
if(!empty($data)) $options[CURLOPT_POSTFIELDS] = $data;
$options[CURLOPT_CUSTOMREQUEST] = strtoupper($method); $ch = curl_init();
curl_setopt_array($ch, $options);
$data = curl_exec($ch);
$error = curl_error($ch);
curl_close($ch);
return $error? false : $data; }
/**
* 文本文件转数组:
* 文件内容:
北京 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;
}

PHP实用的功能函数的更多相关文章

  1. SCWS中文分词,功能函数实例应用

    结合前文的demo演示,现写一个实用的功能函数,使用方法:header('Content-Type:text/html;charset=UTF-8');$text        = '我是一个中国人, ...

  2. 10个不太为人所知的,但实用的PHP函数

    10个不太为人所知的,但实用的PHP函数 您的评价:       较差  收藏该经验     阅读目录 php_check_syntax highlight_string show_source ph ...

  3. mongodb 3.x 之实用新功能窥看[1] ——使用TTLIndex做Cache处理

    mongodb一直都在不断的更新,不断的发展,那些非常好玩也非常实用的功能都逐步加入到了mongodb中,这不就有了本篇对ttlindex的介绍, 刚好我们的生产业务场景中就有这个一个案例... 一: ...

  4. php文字、图片水印功能函数封装

    一直在做有关php文字图片上传方面的工作,所以把此功能函数整理了一次,现在分享给大家. <?php class image { var $g_img; var $g_w; var $g_h; v ...

  5. php实现数字格式化,数字每三位加逗号的功能函数

    原地址:http://www.jb51.net/article/73781.htm php实现数字格式化,数字每三位加逗号的功能函数,具体代码如下: ? 1 2 3 4 5 6 7 8 9 10 11 ...

  6. jQuery基础之(三)jQuery功能函数前缀及与window.onload冲突

    1.jQuery功能函数前缀 在javascript中,开发者通常会编写一些小函数来处理各种操作细节,例如在用户提交表单时,要将文本框最前端和最末端的空格内容清理掉.而javascript中没有类似t ...

  7. Qt调用dll中的功能函数

    声明: 事先我已经自己动手写了一个简单的dll文件(myDLL.dll),C版接口的.并且用我前两篇有关DLL文章里面的方法,从dll中导出了导入库(.lib)文件,dll中有两个函数,原型如下:   ...

  8. [经验共享] MapGIS实用小功能图解——由excel文件导成MapGIS点文件

    项目小组的几个成员都是学地下水和环境的,对于GIS懂得不是很多,于是把一些我们经常用到的mapgis实用小功能做成帮助文档,方便大家使用,发布共享! 1.整理好EXCEL文件(注意X,Y坐标的正确性( ...

  9. Impala系列: Impala常用的功能函数

    --=======================查看内置的函数--=======================hive 不需要进入什么内置数据库, 即可使用 show functions 命令列出 ...

随机推荐

  1. 工作者对象HttpWorkerRequest

    在ASP.NET中,用于处理的请求,需要封装为HttpWorkerRequest类型的对象.该类为抽象类,定义在命名空间System.Web下. #region Assembly System.Web ...

  2. linux的free命令

    free 查看内存使用情况,默认以kb为单位 Mem: total=used+free, 其中buffers和cached是已经使用的内存, 对程序的buffers和cached的理解: os 在内存 ...

  3. Json.NET 利用ContractResolver解决命名不一致问题

    今天在遇到这么个问题,项目上有一部分功能需要访问web api, 这个api请求和相应的数据格式都是使用JSON,JSON中的field命名方式是以下划线分割的,比如"project_nam ...

  4. Card(bestcoder #26 B)

    Card Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submi ...

  5. cocos2d-x类型转换(CCstring int string char UTF-8互转)

    在做数据转换时,最好包含以下头文件 #include <iostream> #include <cmath> #include <string> #include  ...

  6. Model backing a DB Context has changed; Consider Code First Migrations

    Model增加一个字段,数据库对应的也手动添加了字段但是运行时报错 The model backing the 'TopLogDbContext' context has changed since ...

  7. Server Application Unavailable出现的原因及解决方案集锦

    iis ServerAppl 共存 应用程序池 站点  在Asp.net站点中经常出现这种提示 Server Application Unavailable The web application y ...

  8. 在Mysql中如何显示所有用户?

    这是一个mysql初学者经常问到的一个问题,今天我们就带大家看看是如何在Mysql中显示所有用户的.通常我们在mysql中使用SHOW DATABASES可以显示所有的数据库,SHOW TABLES将 ...

  9. NGUI之scroll view制作,以及踩的坑总结

    http://blog.csdn.net/monzart7an/article/details/23878505 链接: http://game.ceeger.com/forum/read.php?t ...

  10. 使用 nginx + thin 的配置启动 rails server

    http://www.iwangzheng.com 在大师的指导下配置了新的服务器的nginx,通过top命令查看了服务器是8个cpu的,所以起了8个端口,把它们都映射到一个总的端口3600上,需要在 ...