应该如何设计才能合理的解决这个问题?或者说,这根本不是问题?
1
rqrq OP 标题没有描述清楚。
class modelA extends Model class modelB extends Model class modelC extends Model controller 在 调用 这三个 model 时,Model 类要被实例化 3 次。 这是不是 OOP 的一个问题? |
2
cevincheung 2015-06-15 10:28:48 +08:00
实例化三次是一定要的。就看一些其他问题怎么去规避,比如model中是不是连接了数据库?那连接那里就单例。是否有需要全局保持一致的变量?那就static修饰。
class model function __construct(): $this->db = database::factory('mysql') class database: function factory($drive): if (!self::$instance) self::$instance = new $drive; self::$instance->connect(); return self::$instance |
3
JohnSmith 2015-06-15 11:03:51 +08:00
推荐使用组合模式来实现集成成员和方法,这样可以解决你的问题,父类抽象和修改也会相对简单一点
|
4
zhujinlong 2015-06-15 11:53:52 +08:00 1
实例化子类时,虽然父类的构造函数会被自动调用,但并不会实例化出一个父类对象.
起码Java是这样,C++印象中也是这样,php/ruby/python不清楚 http://liujinpan75.iteye.com/blog/785136 http://blog.csdn.net/hikvision_java_gyh/article/details/8957445 |
5
timsims 2015-06-15 11:57:44 +08:00
我觉得楼主想问的是会不会实例化6次。。。
|
6
zhujinlong 2015-06-15 12:01:32 +08:00 1
modelA modelB modelC 各实例化一次,Model 没有被实例化,我是说Java
调用初始化方法并不代表会生成对象 http://wenda.tianya.cn/question/3f6b7fd86547f728 |
7
21grams 2015-06-15 12:08:12 +08:00
Model为什么会实例化? Model如果实例化岂不是有六个实例了,别逗了。
|
8
mouhong 2015-06-15 12:10:05 +08:00 2
实例化一个子类只会创建一个对象。就好比生孩子的时候,孩子继承了父母的基因,要是实例化一个子类时,父类也会被实例化,那岂不相当于每生一个孩子,父母也会多一对出来,生第二个孩子时,这些孩子的父母变成三对了?
继承之类的东西都是语言为方便码农的生活而引入的一种抽象,即使是类型,在底层都是不存在的,从底层的角度看,一个对象不过是一块储存了固定字节的内存区域。 |
9
xylophone21 2015-06-15 13:38:18 +08:00
那么到底什么才是实例化呢😄
|
10
otakustay 2015-06-15 13:58:12 +08:00 1
“实例化”和“构造函数执行”是两回事
实例化只有一次,构造函数是父类会依次执行,并且执行在同一个实例上 实例化除了构造函数之外,简单地说还包含了内存分配、指针指向等一系列事情 |
11
hahasong 2015-06-15 14:06:56 +08:00
JAVA里,实例化子类是会同时递归实例化该子类的所有父类的,只不过是隐式的。基础书有上讲。
PHP里,实例化子类只是执行父类的构造函数,没有实例化父类。 这些都是编译器的动作,完全不需要管,按正常业务写就行了 |
12
zmj1316 2015-06-15 16:25:19 +08:00 via Android
感觉ls的大家是不是没有get到lz的点 ?
|
13
akira 2015-06-15 17:39:32 +08:00
想太多了,这不是一个问题。
|