三个核心文件

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的更多相关文章

  1. 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,安装一下就行了. ...

  2. Web API design

    Web API design 28 minutes to read Most modern web applications expose APIs that clients can use to i ...

  3. A web crawler design for data mining

    Abstract The content of the web has increasingly become a focus for academic research. Computer prog ...

  4. SpringMVC——DispatcherServlet的IoC容器(Web应用的IoC容器的子容器)创建过程

    在上一篇<Spring--Web应用中的IoC容器创建(WebApplicationContext根应用上下文的创建过程)>中说到了Web应用中的IoC容器创建过程.这一篇主要讲Sprin ...

  5. Web UI Design Patterns 2014

    http://www.uxpin.com/web-design-patterns.html?utm_source=Interaction%20Design%20Best%20Practices%20V ...

  6. JAVA web 框架集合

    “框架”犹如滔滔江水连绵不绝, 知道有它就好,先掌握自己工作和主流的框架: 在研究好用和新框架. 主流框架教程分享在Java帮帮-免费资源网 其他教程需要时间制作,会陆续分享!!! 152款框架,你还 ...

  7. 25套用于 Web UI 设计的免费 PSD 网页元素模板

    Web 元素是任何网站相关项目都需要的,质量和良好设计的元素对于设计师来说就像宝贝一样.如果您正在为您的网站,博客,Web 应用程序或移动应用程序寻找完美设计的网页元素,那么下面这个列表会是你需要的. ...

  8. Web.config配置文件详解

    整理了一下ASP.NET Web.config配置文件的基本使用方法.很适合新手参看,由于Web.config在使用很灵活,可以自定义一些节点.所以这里只介绍一些比较常用的节点. <?xml v ...

  9. Web.config配置文件详解(新手必看)(转)

    转于:http://www.cnblogs.com/gaoweipeng/archive/2009/05/17/1458762.html <?xml version="1.0" ...

随机推荐

  1. 浅谈压缩感知(二十六):压缩感知重构算法之分段弱正交匹配追踪(SWOMP)

    主要内容: SWOMP的算法流程 SWOMP的MATLAB实现 一维信号的实验与结果 门限参数a.测量数M与重构成功概率关系的实验与结果 SWOMP与StOMP性能比较 一.SWOMP的算法流程 分段 ...

  2. lucene如何通过docId快速查找field字段以及最近距离等信息?

    http://www.cnblogs.com/LBSer/p/4419052.html 1 问题描述 我们的检索排序服务往往需要结合个性化算法来进行重排序,一般来说分两步:1)进行粗排序,这一过程由检 ...

  3. duilib进阶教程 -- 响应windows原生消息和自定义消息(13)

    一.windows原生消息 同样,入门教程只是给出了响应windows原生消息的方法,并没给出例子,这里以自适应屏幕分辨率为例.迅雷播放器虽然可以在启动的时候自动调整窗口大小,但是当屏幕分辨率实时改变 ...

  4. asp.net webAPI 自动生成帮助文档并测试

    之前在项目中有用到webapi对外提供接口,发现在项目中有根据webapi的方法和注释自动生成帮助文档,还可以测试webapi方法,功能很是强大,现拿出来与大家分享一下. 先看一下生成的webapi文 ...

  5. jQuery的简单入门练习

    <html> <head> <meta charset="utf-8"> <title>jQuery的练习</title> ...

  6. python基于LeanCloud的短信验证

    python基于LeanCloud的短信验证 1. 获取LeanCloud的Id.Key 2. 安装Flask框架和Requests库 pip install flask pip install re ...

  7. 在Unicode版Inno Setup中使用ISSkin

    ISSkin是Code jock 公司出品的Inno Setup 皮肤插件,用于为Inno制作的安装程序提供皮肤功能. 自Delphi发布2009之后,Inno Setup 开始出现支持Unicode ...

  8. nginx 配置其他路径

    gedit /etc/nginx/sites-enabled/default location /hlstest { types { application/vnd.apple.mpegurl m3u ...

  9. AngularJS中的http拦截

    $http服务允许我们与服务端交互,有时候我们希望在发出请求之前以及收到响应之后做些事情.即http拦截. $httpProvider包含了一个interceptors的数组. 我们这样创建一个int ...

  10. IE11企业模式介绍及可用性评估

    什么是企业模式? 企业模式是可以在 Windows 8.1 和 Windows7 设备上的 Internet Explorer 11 上运行的一种兼容性模式,该模式允许网站使用已修改的浏览器配置来呈现 ...