php 使用映射执行授权模式的例子
2015-01-09 11:44
232 查看
映射类ReflectionClass可以在运行中查询类名,函数名,变量等等很多信息,给编程带来很大灵活性,详细信息可以查看php帮助文档,
以下是使用映射执行授权模式的简单例子例子(程序已经过调试OK)。
<?php
class ClassOne {
function callClassOne() {
echo "In Class One\n";
}
}
class ClassTwo {
function callClassTwo() {
echo "In Class Two\n";
}
}
class ClassOneDelegator {
public $targets;
function __construct() {
$this->targets[] = new ClassOne();
}
function addObject($obj) {
$this->targets[] = $obj;
}
function __call($name, $args) {
foreach ($this->targets as $obj) {
$r = new ReflectionClass($obj);
if(!$r->hasMethod($name))continue;
if ($method = $r->getMethod($name)) {
if ($method->isPublic() && !$method->isAbstract()) {
return $method->invoke($obj, $args);
}
}
echo $obj . "\n";
}
}
}
$obj = new ClassOneDelegator();
$obj->addObject(new ClassTwo());
$obj->callClassOne();
$obj->callClassTwo();
?>
输出:
教材中的例子。但是经过我的修正(红色字体)后才能正常运行。
以下是使用映射执行授权模式的简单例子例子(程序已经过调试OK)。
<?php
class ClassOne {
function callClassOne() {
echo "In Class One\n";
}
}
class ClassTwo {
function callClassTwo() {
echo "In Class Two\n";
}
}
class ClassOneDelegator {
public $targets;
function __construct() {
$this->targets[] = new ClassOne();
}
function addObject($obj) {
$this->targets[] = $obj;
}
function __call($name, $args) {
foreach ($this->targets as $obj) {
$r = new ReflectionClass($obj);
if(!$r->hasMethod($name))continue;
if ($method = $r->getMethod($name)) {
if ($method->isPublic() && !$method->isAbstract()) {
return $method->invoke($obj, $args);
}
}
echo $obj . "\n";
}
}
}
$obj = new ClassOneDelegator();
$obj->addObject(new ClassTwo());
$obj->callClassOne();
$obj->callClassTwo();
?>
输出:
教材中的例子。但是经过我的修正(红色字体)后才能正常运行。
相关文章推荐
- php-cgi如何使用(php cli模式执行php文件)
- PHP中使用微秒计算脚本执行时间例子
- PHP中使用微秒计算脚本执行时间例子
- php 设计模式(注册器模式+工厂模式+数据库映射模式,单例模式+工厂模式+注册器模式混合使用)
- 关于:“无法序列化会话状态。在“StateServer”或“SQLServer”模式下,ASP.NET 将序列化会话状态对象,因此不允许使用无法序列化的对象或 MarshalByRef 对象。如果自定义会话状态存储在“Custom”模式下执行了类似的序列化,则适用同样的限制。”的问题
- 解决问题:vs 使用命令行参数调试时出现"当前项目设置指定将使用特定的安全权限对该项目进行调试.在此模式下,命令行参数将不会传递给可执行文件."
- 使用模式的一个简单例子——画图程序
- 在linux下定时执行PHP脚本(定时执行crontab使用方法详解)
- 设计模式使用心得 php [二 observer]
- 实时观察 IIS 脚本 ASP/PHP 执行情况和速度(个人授权免费,无功能限制)
- 只有一个公网IP也可以使用LVS的DR模式!(外带php session粘滞问题解决)
- 一个使用TBB Lambda 表达式实现并行执行的例子(转)
- 无法序列化会话状态。在“StateServer”或“SQLServer”模式下,ASP.NET 将序列化会话状态对象,因此不允许使用无法序列化的对象或 MarshalByRef 对象。如果自定义会话状态存储在“Custom”模式下执行了类似的序
- asp.net使用参数(parameters)的方法执行数据库操作例子
- 今天又哥哥问俺php 全局变量的使用问题了,俺在这里发个简单的例子
- 在linux下定时执行PHP脚本(定时执行crontab使用方法详解)
- 如何使用动态共享对象的模式来安装PHP
- 观察者模式使用WebForm实现的例子
- 终于解决了ubuntu下gnome-terminal中使用vim时在Insert模式下功能键键映射的问题
- PHP通过COM使用ADODB的简单例子