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" ...
随机推荐
- JavaScript text highlighting JQuery plugin
介绍一个JQuery的插件,用来在页面上高亮显示匹配到的字符串. Demo 点击下面的两个链接以查看效果: highlight javascript 点击Remove highlights移除高亮显示 ...
- ios 设置状态栏文本颜色为白色
1,在.plist文件中添加一个键值对:设置View controller-based status bar appearance的值为NO 2,在方法中 - (BOOL)application:(U ...
- 深究JS异步编程模型
前言 上周5在公司作了关于JS异步编程模型的技术分享,可能是内容太干的缘故吧,最后从大家的表情看出"这条粉肠到底在说啥?"的结果:(下面是PPT的讲义,具体的PPT和示例代码在h ...
- C语言实现二叉树-01版
故事是这样开始的,项目经理有一天终于还是拍拍我肩膀说: 无论你的链表写得多么的好,无论是多么的灵活,我也得费老半天才查找到想要的数据: 这让我的工作非常苦恼,听说有一种叫做二叉树的数据结构,你看能不能 ...
- Atiti.ui原理与gui理论
Atiti.ui原理与gui理论 1. 概论2 2. ui的类型2 2.1. RMGUI vs IMGUI2 2.2. Cli2 2.3. Gui2 2.4. Nui natural user int ...
- atitit.提升开发效率---mda 软件开发方式的革命
atitit.提升开发效率---mda 软件开发方式的革命 1. 软件开发方式的革命开发工具的抽象层次将再次提升 1 2. 应用框架和其实现相分离 2 3. 目前的问题模型和代码不同步 2 4. MD ...
- paip.提高稳定性---自动检测sleep mysql数据库死连接以及kill
paip.提高稳定性---自动检测sleep mysql数据库死连接以及kill 作者Attilax 艾龙, EMAIL:1466519819@qq.com 来源:attilax的专栏 地址:ht ...
- 看2016上半年O2O新风向,太阳终会穿破乌云
纵观我国的O2O行业发展历程,去年上半年还处于资本的投资热潮,下半年就遭遇到了寒冬的突袭,使得很多才刚刚发芽的O2O企业直接被一阵寒风给吹倒.但同样的,一阵风浪过后才知道在O2O这片战场上谁才是有实力 ...
- CreateJSのTweenJS、SoundJS、PreloadJS
TweenJS基础实例: var canvas = document.getElementById('myCanvas'), stage = new createjs.Stage(canvas); v ...
- 迅美VPS安装和配置MySQL数据库教程
MySQL相关教程与知识: 迅美VPS安装和配置MySQL数据库教程 navicat8管理MySQL教程-创建数据库和导入数据 navicat8管理MySQL教程-管理建立用户和分配 ...