php ioc and web rest design
三个核心文件
1.公开访问web service配置 config.php
2.管理BEAN,扫描,注册,初始化等流程 ioc.php
3.管理 rest 拦载处理 ws.php
config.php
<?php
/**
* @author solq
* @deprecated blog http://solq.cnblogs.com
*/
$_suffix = ".php";
$_beans=array(
'TestRef',
);
/**容器注册类*/
$_ioc= array();
$_app_path_index=1;
?>
ioc.php
<?php
/**
* @author solq
* @deprecated blog http://solq.cnblogs.com
*/ include_once "config.php";
/**
扫描BEAN
*/
function scan_bean(){
global $_suffix;
global $_beans;
global $_ioc; for($i=0;$i<count($_beans);$i++){
$name = $_beans[$i];
$file = $name.$_suffix;
include_once $file;
register_bean($name,new $name);
}
} /**注册BEAN*/
function register_bean($name,$bean){
global $_ioc;
$_ioc[$name]=$bean;
} /**获取BEAN*/
function get_bean($name){
global $_ioc;
return $_ioc[$name];
} /**容器注册后期阶段*/
function postConstruct_bean(){
global $_ioc;
foreach($_ioc as $bean){
if (is_subclass_of($bean, 'Ioc')) {
$bean->{"setIoc"}($_ioc);
$bean->{"postConstruct"}();
}
}
}
/**容器销毁阶段*/
function preDestroy_bean(){
global $_ioc;
foreach($_ioc as $bean){
if (is_subclass_of($bean, 'Ioc')) {
$bean->{"preDestroy"}();
}
}
} interface Ioc{
public function postConstruct();
public function preDestroy();
public function setIoc($_ioc);
} abstract class AbstractIoc implements Ioc{
public function postConstruct(){}
public function preDestroy(){}
public function setIoc($_ioc){}
} ?>
ws.php
<?php
/**
* @author solq
* @deprecated blog http://solq.cnblogs.com
*/ include_once "ioc.php";
scan_bean(); $page=$_SERVER['REQUEST_URI'];
$segments=explode('/',trim($page,'/')); global $_app_path_index;
//应用
$app = $segments[$_app_path_index];
//服务
$service = $segments[$_app_path_index+1]; $method=$service;
$get_params = $_GET;
$post_params = $_POST; $bean = get_bean($app); if($bean ==null){
throw new Exception("bean [".$app."] not find");
} postConstruct_bean();
___call($bean,$method,$get_params,$post_params);
preDestroy_bean(); /**
获取请求方式
*/
function get_request_method(){
return strtolower($_SERVER['REQUEST_METHOD']);
} /**
动态映射处理
*/
function ___call($bean,$method, $get_params = array(), $post_params = array()){ $method = get_request_method().'_'.$method;
$reflection = new ReflectionMethod($bean, $method);
$pass = array();
if(strpos($method,"post_")){
$args = $post_params;
}else{
$args = $get_params;
} foreach($reflection->getParameters() as $param) {
//数据类型注入分解
$value = $args[$param->getName()];
if($value==null && !$param->isDefaultValueAvailable()){
throw new Exception("method [".$method."] param is not :".$param->getName());
}
$pass[] = $value;
}
return $reflection->invokeArgs($bean, $pass);
}
?>
TestRef.php
<?php
include_once "ioc.php";
class TestRef extends AbstractIoc
{
public $one = 'aaaaaaaa'; public function __construct(){
} /**
书写约定
[请求方式]_[服务]
*/
public function get_test1($a,$b,$c=null){
echo $this->one."\n";
echo $b."\n";
echo $c."\n";
} public function preDestroy(){
echo "<br/>postConstruct_bean";
}
}
?>
测试url : http://127.0.0.1/ws.php/TestRef/test1/?a=121212&b=1212
结果
aaaaaaaa 1212
postConstruct_bean
php ioc and web rest design的更多相关文章
- IIS配置Asp.net时,出现“未能加载文件或程序集“System.Web.Extensions.Design, Version=1.0.61025.0”
如果出现未能加载文件或程序集“System.Web.Extensions.Design, Version=1.0.61025.0, 主要是没有安装.net framwork 3.5,安装一下就行了. ...
- Web API design
Web API design 28 minutes to read Most modern web applications expose APIs that clients can use to i ...
- A web crawler design for data mining
Abstract The content of the web has increasingly become a focus for academic research. Computer prog ...
- SpringMVC——DispatcherServlet的IoC容器(Web应用的IoC容器的子容器)创建过程
在上一篇<Spring--Web应用中的IoC容器创建(WebApplicationContext根应用上下文的创建过程)>中说到了Web应用中的IoC容器创建过程.这一篇主要讲Sprin ...
- Web UI Design Patterns 2014
http://www.uxpin.com/web-design-patterns.html?utm_source=Interaction%20Design%20Best%20Practices%20V ...
- JAVA web 框架集合
“框架”犹如滔滔江水连绵不绝, 知道有它就好,先掌握自己工作和主流的框架: 在研究好用和新框架. 主流框架教程分享在Java帮帮-免费资源网 其他教程需要时间制作,会陆续分享!!! 152款框架,你还 ...
- 25套用于 Web UI 设计的免费 PSD 网页元素模板
Web 元素是任何网站相关项目都需要的,质量和良好设计的元素对于设计师来说就像宝贝一样.如果您正在为您的网站,博客,Web 应用程序或移动应用程序寻找完美设计的网页元素,那么下面这个列表会是你需要的. ...
- Web.config配置文件详解
整理了一下ASP.NET Web.config配置文件的基本使用方法.很适合新手参看,由于Web.config在使用很灵活,可以自定义一些节点.所以这里只介绍一些比较常用的节点. <?xml v ...
- Web.config配置文件详解(新手必看)(转)
转于:http://www.cnblogs.com/gaoweipeng/archive/2009/05/17/1458762.html <?xml version="1.0" ...
随机推荐
- ASP.NET Entity Framework with MySql服务器发布环境配置
首先,.net应该自带Entity Framework,所以服务器只要有对应版本的.net Framework就OK! 我们在开发环境中一般会直接使用edmx来管理应用程序与数据库的交互操作,所有与数 ...
- GIt 从入门到放弃
一.注册github账号 github网址https://github.com/ 下一步 然后,你的邮箱会收到一封邮件,进行邮箱验证就行了 二.创建github仓库 登录你的github,在首页的右方 ...
- HTTP协议之chunk编码(分块传输编码
Transfer-Encoding: chunked 表示输出的内容长度不能确定,普通的静态页面.图片之类的基本上都用不到这个. 但动态页面就有可能会用到,但我也注意到大部分asp,php,asp.n ...
- Lucene
Lucene 是apache软件基金会一个开放源代码的全文检索引擎工具包,是一个全文检索引擎的架构,提供了完整的查询引擎和索引引擎,部分文本分析引擎. Lucene的目的是为软件开发人员提供一个简单易 ...
- paip.提升性能---mysql 优化cpu多核以及lan性能的关系.
paip.提升性能---mysql 优化cpu多核以及lan性能的关系. 作者Attilax 艾龙, EMAIL:1466519819@qq.com 来源:attilax的专栏 地址:http:/ ...
- 一个jsonp的简单实例
<script type="text/javascript"> //添加<script>标签的方法 function addScriptTag(src){ ...
- HTML 邮件链接,超链接发邮件
在网页中可以设置如“联系我们”.“问题反馈”等所谓的邮箱链接,类似网页超链接,只是可以直接打开默认邮箱程序. 使用<a href="mailto:youEMail@xxx.yyy&qu ...
- 深入学习golang(3)—类型方法
类型方法 1. 给类型定义方法 在Go语言中,我们可以给任何类型(包括内置类型,但不包括指针和接口)定义方法.例如,在实际编程中,我们经常使用[ ]byte的切片,我们可以定义一个新的类型: type ...
- eclipse快捷键调试总结【转】
http://www.cnblogs.com/yxnchinahlj/archive/2012/02/22/2363542.html (1)Ctrl+M --切换窗口的大小(2)Ctrl+Q --跳到 ...
- jqPlot插件绘制柱状图
每天都在这里看别人写的东西,确发现自己好久没写文章了,可能是因为确实很忙,或许这也是在给自己找的一种借口. 不过这也是我人生中加入得第一个创业公司,来到这里才知道创业公司其实真的很辛苦,产品的萌芽才开 ...