如果您使用Magical方法'__set()',请注意
<?php(电话)
$myobject->测试[“myarray”] ='数据';
?>
不会出现!
为此,如果您想使用__set Method;,您必须以良好的方式进行操作。)
<?php(电话)
$myobject->测试=数组('我的阵列'=>'数据');
?>
如果已经设置了变量,__set魔法方法就不会出现!
我的第一个解决方案是使用Caller类。
有了它,我就知道我现在使用的是哪个模块了!
但谁需要它……:]
有更好的解决方案。。。
代码如下:
<?php(电话)
班呼叫者{
公众的$呼叫方;
公众的$模块;
功能__呼叫($函数名,$个参数=阵列()){
$这个->设置模块信息();
如果(是对象(_O)($这个->呼叫者) &&函数_存在('调用用户_取消数组'))
$返回=呼叫用户取消阵列(数组(&$这个->呼叫者,$函数名),$个参数);
其他的
触发器错误(“使用Call_user_func_array调用函数失败”,用户错误(_E));
$这个->取消设置模块信息();
返回$返回;
}
功能__构造($呼叫者类名称=假,$调用者模块名称=“电子线路板”) {
如果($callerClassName($callerClassName)==假)
触发器错误('无类名',用户错误);
$这个->模块=$调用者模块名称;
如果(类存在(_E)($呼叫者类名称))
$这个->呼叫者=新$呼叫者类名称();
其他的
触发器错误('类不存在:“”.$呼叫者类名称.'\'',用户错误);
如果(是对象(_O)($这个->呼叫者))
{
$这个->设置模块信息();
如果(方法存在(_E)($这个->呼叫者,“__init”))
$这个->呼叫者->__初始化();
$这个->取消设置模块信息();
}
其他的
触发器错误('调用方没有对象!',用户错误(_E));
}
功能__破坏() {
$这个->设置模块信息();
如果(方法存在(_E)($这个->呼叫者,“__deinit”))
$这个->呼叫者->__脱单元();
$这个->取消设置模块信息();
}
功能__发行($isset(美元)) {
$这个->设置模块信息();
如果(是对象(_O)($这个->呼叫者))
$返回=设置($这个->呼叫者->{$isset(美元)});
其他的
触发器错误('调用方没有对象!',用户错误);
$这个->取消设置模块信息();
返回$返回;
}
功能__未设置($未设置) {
$这个->设置模块信息();
如果(是对象(_O)($这个->呼叫者)) {
如果(isset($这个->呼叫者->{$未设置}))
未设置($这个->呼叫者->{未设置的美元});
}
其他的
触发器错误('调用方没有对象!',用户错误);
$这个->取消设置模块信息();
}
功能__套($套,$val(美元)) {
$这个->设置模块信息();
如果(是对象(_O)($这个->呼叫者))
$这个->呼叫者->{$套} =$val美元;
其他的
触发器错误('调用方没有对象!',用户错误);
$这个->取消设置模块信息();
}
功能__得到($获得) {
$这个->设置模块信息();
如果(是对象(_O)($这个->呼叫者)) {
如果(isset($这个->呼叫者->{$获得}))
$返回=$这个->呼叫者->{$获得};
其他的
$返回=假;
}
其他的
触发器错误('调用者不是对象!',用户错误(_E));
$这个->取消设置模块信息();
返回$返回;
}
功能设置模块信息() {
$这个->呼叫者->模块=$这个->模块;
}
功能取消设置模块信息(){
$这个->呼叫者->模块=无效的;
}
}
班配置{
公众的$模块;
公众的$测试;
功能__构造()
{
打印('构造函数将没有模块信息。。。改用__init()<br/>');
打印('--> '.打印(r)($这个->模块,1).' <--');
打印(“<br/>”);
打印(“<br/>”);
$这个->测试='123';
}
功能__初始化()
{
打印('使用__init()<br/>');
打印('--> '.打印(r)($这个->模块,1).' <--');
打印(“<br/>”);
打印(“<br/>”);
}
功能testFunction(测试功能)($测试=假)
{
如果($测试!=假)
$这个->测试=$测试;
}
}
回声(“<前>”);
$哇=新呼叫者('配置',“留言簿”);
打印(r)($哇->测试);
打印(“<br/>”);
打印(“<br/>”);
$哇->测试='456';
打印(r)($哇->测试);
打印(“<br/>”);
打印(“<br/>”);
$哇->testFunction(测试功能)('789');
打印(r)($哇->测试);
打印(“<br/>”);
打印(“<br/>”);
打印(r)($哇->模块);
回声(“</pre>”);
?>
输出类似于:
构造函数将没有模块信息。。。改用__init()!
--> <--
使用__init()!
-->留言簿<--
123
456
789
留言簿