php5面向对象入门(二)

 原文作者 刀客羽朋 ,这里重新整理,出处:http://www.cnblogs.com/tograce/category/161526.html

类的继承
类的继承是这样定义的:
<?php
class animal{
......
  }
}
class dog extends animal{
......
}
?>


一个关于继承的简单实例:
说明:

1、在php5中,构造函数可被继承;
2、在php5中,私有变量和私有方法不能被继承。

重写(override)

      如果从父类继承的方法不能满足子类的需求,可以对其进行改写,这个过程叫方法的覆盖(override),也称方法的重写。
      当对父类的方法进行重写时,子类中的方法必须和父类中的对应的方法具有相同的方法名称,在php5中不限制输入参数类型、参数数量和返回值类型。
      子类中的覆盖方法不能使用比父类中被覆盖方法更严格的访问权限。(这是什么意思?就是说如果父类中的一个方法为public属性的,那每其子类的该方法就不能定义为private属性的)

例子:

重写简单实例


构造函数的重写
当子类重写了构造函数,当在子类被实例化时,只调用子类的构造函数,而父类的构造函数不被调用。

Code


this关键字
$this代表其所在的当前对象
$this在构造函数中指该构造函数所创建的新对象
在类中使用当前对象的属性和方法,必须使用$this->取值

来看一个局部变量和属性同名的小例:

Code

用$this调用对象中的其它方法

Code


用$this调用构造函数
调用构造函数和析构函数是一样的

<?
class A{
    private $a = 0;
    public function __construct(){
        $this->a = $this->a + 1 ;
    }  
    public function doSomeThing(){
        $this->__construct();
        return $this->a;
    }
}
$a = new A(); // 这里的$a 可不是类中的任何一个变量了.
echo "现在 "$a 的值是" . $a->doSomeThing();
?>

输出结果是:现在 "$a 的值是 2

$this到到底是什么?
$this就是指当前对象,我们甚至可以返回这个对象使用$this,

$this返回当前对象


 用$this传递对象

Code


输出结果:
55age, his sal is 1000
25age, his sal is 800
10age, his sal is 0


parent::关键字
通过parent::调用父类的方法


Code


将输出:
普通员工的工资是: 4200
经理的工资是: 5700

 

重载Overload
当类中的方法名相同时,称为方法的重载(Overload);
PHP5中不支持重载(Overload)

 

实例

在前面,我们建立一个user类,并可使用类获取用户信息,现在,我们将进一步加强其功能,用户可修改自己的密码。
先需要将前面的类稍修改,在UserInfo类中将获取密码的方法隐藏。
然后再写一个 UserChange 类,它继承自 UserInfo 类,但在这个类中增加修改密码的方法,并将获取密码的方法重写为public权限。

在这里,我们还将连接单独写成一个类 MysqlConn

Code


加强了的 UserInfo 类

Code


子类UserChange 类

Code


还记得上回用 UserInfo类获取值的实例吗,这里照样可以放心使用:

<?php
//view_user_mysql_process.php
require_once("class_user.php");

$user=new UserInfo("shuwill");

$userName=$user->getUserName();
$birthplace=$user->getBirthplace();
$email=$user->getEmail();

echo "Your name is ".$userName."<br />";
echo "Your birthplace is ".$birthplace."<br />";
echo "Your email is ".$email."<br />";
?>



posted @ 2009-01-06 13:29  尚远  阅读(470)  评论(0编辑  收藏  举报