konakona
__construct() 小讲
__construct() 小讲

其实这样的小技巧真的也没什么好原创的,因为很久没有遇到父子关系错乱的时候,所以决定写篇日志理清下思绪。另外也可以提醒一些对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
赞赏
https://secure.gravatar.com/avatar/3b712b34a0e1b689cfb524c9c6bcdc47?s=256&r=g

团哥

文章作者

继续玩我的CODE,让别人说去。 低调,就是这么自信。

发表评论

textsms
account_circle
email

  • https://secure.gravatar.com/avatar/7d874b02fdb7670b131aa827a6e0b40d?s=80&r=g
    fifsky

    解释很独到

    9年前回复

konakona

__construct() 小讲
其实这样的小技巧真的也没什么好原创的,因为很久没有遇到父子关系错乱的时候,所以决定写篇日志理清下思绪。另外也可以提醒一些对OOP不熟悉的朋友,注意下这个细节。
扫描二维码继续阅读
2010-06-19