其实这样的小技巧真的也没什么好原创的,因为很久没有遇到父子关系错乱的时候,所以决定写篇日志理清下思绪。另外也可以提醒一些对OOP不熟 悉的朋友,注意下这个细节。
最近在调戏ThinkPHP,因为是框架,那么控制器一般都是继承于父类,而这个父类里往往都有一个__construct()。
由此因法了我今天打这篇日志的欲望,以下简单以“class mather”和“class father”以及实体对象“$son”来讲解问题。
<?php /** * T个est * @author:konakona */ class father{ //有爸爸的时候,他就会告诉你,他是你爸! public function __construct(){ echo "我是你爸"; } } class mather extends father{ //有妈妈的时候,她也会告诉你她是你妈! function mather(){ echo "我是你妈"; } } $fatherson = new father(); //爸爸自然会说 "我是你爸" $son = new mather(); //妈妈自然会说 "我是你妈" //但是继母什么也不会告诉你…… class stepmothersaynothing extends father{ } $son = new stepmothersaynothing(); //因为后妈什么也没说,所以打印的结果是"我是你爸" ?>
2个写法都意味着在生成实体对象时,首先执行的动作,都属于【构造函数】。
在当前类(子类)里,如果你【重写】了父类的某个同名函数,那么以子类的这个方法为准,抛弃父类的方法。
如果你希望子类也拥有父类的方法,只是稍微有些不同,你可以用parent::去继承父类的东西。
public function __construct(){ parent::__construct(); }
对于初学者来说,以后还会有更复杂的父子关系,更甚的还有第三者(抽象类、PDO),理清思绪很重要。
最近一直用工厂模式(过程)进行开发,OOP显得有点生疏了呢。
mather
发表回复