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" ...
随机推荐
- Lingo 做线性规划 - Revenue Management
Reference: <An Introduction to Management Science Quantitative Approaches to Decision Making, Rev ...
- Node.js学习系列总索引
Node.js学习系列也积累了一些了,建个总索引方便相互交流学习,后面会持续更新^_^! 尽量写些和实战相关的,不讲太多大道理... Node.js学习笔记系列总索引 Nodejs学习笔记(一)--- ...
- Authentication in .NET Web Api
在介绍WebApi这个小demo前,先来简单说一下OAuth这个东西. OAuth开放授权,用户可以对自己的资源进行第三方授权,那么第三方就可以不用你的账号密码就可以访问你授权的资源了.比如一些论坛直 ...
- paip.文件目录操作uAPI php python java对照
paip.文件目录操作uAPI php python java对照 chdir -- 改变目录 chroot -- 改变根目录 dir -- directory 类 closedir -- 关闭目录句 ...
- IOS设计模式浅析之简单工厂模式(SimpleFactory)
概述 首先说明一下,简单工厂模式不属于23种GOF设计模式之一.它也称作静态工厂方法模式,是工厂方法模式的特殊实现.这里对简单工厂模式进行介绍,是为本系列后面的工厂方法和抽象工厂模式做一个引子. 定义 ...
- Prototype in JavaScript
声明 本文旨在入门,简单了解下何为prototype & __proto__ 原型对象 我们创建每个函数都有个prototype(原型)属性,该属性是一个指针,指向一个对象,而这对象的用途是包 ...
- Linux操作系统shell与函数详解
shell和函数的定义 1. linux shell 函数 将一组命令集或语句形成一个可用的块, 这些语句块称为函数. 2. shell 函数的组成 函数名:函数名字,注意一个脚本中函数名要唯一, ...
- GCD的同步异步串行并行、NSOperation和NSOperationQueue一级用dispatch_once实现单例
转:http://www.tuicool.com/articles/NVVnMn (1)GCD实现的同步异步.串行并行. ——同步sync应用场景:用户登录,利用阻塞 ——串行异步应用场景:下载等耗时 ...
- When cloning on with git bash on Windows, getting Fatal: UriFormatException encountered
I am using git bash $ git --version git version .windows. on Windows 7. When I clone a repo, I see: ...
- C#控制其它程序
[DllImport("user32.dll", EntryPoint = "FindWindow", SetLastError = true)] ...