ZenDaoPMS 中__SET问题
时间:2011-09-22
来源:互联网
- static public function setMember($objName, $key, $value)
- {
- global $objName;
- if(!is_object($objName) or empty($key)) return false;
- $key = str_replace('.', '->', $key);
- $value = serialize($value);
- $code = ("\${objName}->{$key}=unserialize(<<<EOT\n$value\nEOT\n);");
- eval($code);
- return true;
- }
setMember('config', $key, $value)
config 是一个仅有 一个方法的类 (非 __set() 非 __get() )
问一下 为什么 对一个 没有 __set() 方法的类 可以config->$key=$value ;
是ZenDaoPMS 中的 framework包 class helper.class.php 1499行 . 看不懂这句.
print_r($config) 出来的是数组 var_dump($config)是一个对象.
这个config 怎么这么像 stdClass 类....
越来越糊涂了. 是不是 每个声明的基类都默认继承了 stdClass
求一个解释?????
作者: tangbao203 发布时间: 2011-09-22
1.
config 是一个仅有 一个方法的类
请分清类和对象的关系,不要混为一谈。正确的说法是“config 是一个仅有 一个方法的类所生成的实例”
2.php中的对象本来就能print_r打印,因为php里的对象是数组模拟的。
况且,从来没有人说过,print_r只能打印数组。
3.直接看代码吧
你给的代码不报错,是因为这个key在原先的类中没有或者是public的。
至于这个类到底是干啥的我不清楚,不过倒是很多php的OO代码属于一路public的“伪OO”代码
- class test{
- private $m=888;
- function say(){
- echo 'say';
- }
- /**
- public function __set($name, $value) {
- $this->$name=$value;
- echo "------{$name}=${value}----",PHP_EOL;
- }
- **/
- }
- $o=new test;
- $o->m='123';
- print_r($o);
4.自定义类和stdclass没有所谓的继承关系,而是当把一个标量转为对象时,对象默认是stdclass的实例。
stdclass不是基类。is_subclass_of,instanceof,get_parent_class等函数可以帮助你理清类之间,对象和类之间的关系。
可自己动手验证。
5.学习手册和面向对象
作者: iminto 发布时间: 2011-09-22
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28