[置顶] PHP5 面向对象的一个新疑惑点,类对象实例竟然能访问类中私有方法,不知道是不是bug
2016-08-25 17:01
513 查看
先看代码:
加亮处 应该是有问题的
此处竟然能从对象实例中访问私有方法,太不可思议了.... 难不成是因为在一个类中的代码都是可以调用的,而不是以 对象 来单独划分的么?
class orm_factory { /** * 数据库操作对象 * * @var orm_driver */ private $_driver = null ; /** * 表操作对象 * * @var orm_table_operator */ private $_table_operator = null ; private static $_valid_dsn_set = array(); private function __init_params(orm_driver $driver,orm_table_operator $table_operator){ $this->_driver = $driver ;echo "111111111111" ; $this->_table_operator = $table_operator ; } function get_driver(){ return $this->_driver ; } /** * 工厂实例对象 * @param string $dsn * @return orm_factory */ static function instance($dsn){ static $inst = null ; if (!$inst) $inst = new orm_factory() ; if (!isset(self::$_valid_dsn_set[$dsn])){ try { $driver = new orm_driver($dsn) ; $driver->open_connect(); $table_operator = new orm_table_operator($driver); self::$_valid_dsn_set[$dsn] = array( '__driver__' => $driver , '__operator__' => $table_operator ); } catch (orm_driver_exception $ex){ throw new orm_factory_exception($ex->getMessage()); } } $inst->__init_params(self::$_valid_dsn_set[$dsn]['__driver__'],self::$_valid_dsn_set[$dsn]['__operator__']); return $inst ; } /** * 返回表操作器对象 * @param string $table * @return orm_table_operator */ function get_operator($table){ // 此处 可能触发 orm_table_exception $this->_table_operator->register_table($table) ; return $this->_table_operator; } }
加亮处 应该是有问题的
$inst->__init_params
此处竟然能从对象实例中访问私有方法,太不可思议了.... 难不成是因为在一个类中的代码都是可以调用的,而不是以 对象 来单独划分的么?
相关文章推荐
- 本类的方法可以访问本类的任何一个对象的私有域、
- 为什么一个对象调用的类方法可以访问该类其他对象的私有成员
- (转载,但不知道谁原创)获取SPRING 代理对象的真实实例,可以反射私有方法,便于测试
- 一段PHP对象访问类私有方法的代码
- 项目调试时候,出现其中用到的一个组件“访问被拒绝”的解决方法(.net的一个BUG)
- C++返回类实例,以及访问其他对象的私有成员
- 同一个类的不同对象,对象的成员函数可以互相访问各自对象的私有变量和私有成员函数
- 发现ASP.NET2.0母版页和主题的一个小问题,不知道是不是不BUG
- 访问C++类对象中私有成员变量的方法
- Objective-C面向对象-Objective-C 对象,实例和方法
- 【一个实体对象不能由多个 IEntityChangeTracker 实例引用】原因及解决方法
- 关于java多线程中同步的问题(两个线程访问同一个实例类的两个同步方法,会不会互相影响)
- 通过操作地址的方法来访问C++类对象中私有成员变量
- GOOD单例模式,多线程同时访问一个实例对象问题的处理,加lock
- 访问C++类对象中私有成员变量的方法
- 关于访问C++类对象中私有成员变量的方法,不考虑用友元
- PHP5的对象模型[6]--访问属性和方法
- 用工厂模式写了一个数据库访问类库,但是对于数据库连接字符串和数据库类型有两种方法,不知道哪种好,大家看看了,附类关系图
- 修改SQL数据库中表字段类型时,报“一个或多个对象访问此列”错误的解决方法
- 笔记2-----创建一个java实例对象的方法