php面向对象 2

继承
概念:如果一个类有子类,那么该子类会继承父类的一切东西(私有成员访问不到)
在定义子类的时候需要加一个关键字:extends
特点:单继承,一个类只能有一个父类
如果父类中有构造函数,子类在实例化的时候要按照父类构造函数的标准来实例化

子类对父类方法的重写:在子类中写一个同样的方法
final:用来修饰类,代表该类是一个最终类,该类无法被继承。

class Info
{
    public $code;
    protected $name;
    private $sex;
    function __construct($s) //构造函数
    {
        $this->sex = $s;
    }
}
class Test extends Info
{
}
$t = new Test("女");
$t->Code = "p001";
var_dump($t);

子类中调用父类的方法  parent::

class Info
{
    public $code;
    protected $name;
    private $sex;
    function Say()
    {
        echo "hello";
    }
}
class Test extends Info
{
    function Say()
    {
        parent ::Say();       //调用父类的Say()方法
        echo "Test Say";
    }
}
$t = new Test();
$t->say();

静态成员
类里面的普通成员是属于对象的,不是属于类的(调用的时候是用对象调用的)
什么叫做静态成员:类静态成员是属于类的,不是属于每个对象的
定义静态成员用static关键字
静态方法里面无法调用普通成员
静态方法可以调用静态成员,使用self关键字调用
self代表该类,$this代表该对象

 1 class Info
 2 {
 3     public static $class;  //static关键字定义静态的
 4     public $code;
 5     protected $name;
 6     private $sex;
 7     static function Test()  //静态方法
 8     {
 9         self::$class;    //调用自身类里面的静态成员
10         echo "静态方法!";
11     }
12     function Say()
13     {
14         echo self::$class;   //普通方法里面可以调用静态成员
15         echo "hello";
16     }
17 }
18 $r = new Ren();
19 Info::$class = "0305";   //访问静态成员用 ::
20 Info::Test();                   //调用静态方法

const  n = 20;   //将某些类里面常用到的东西定义为一个常量,方便使用

多态
概念:当父类引用指向子类实例的时候,由于子类对父类函数进行了重写,导致我们在使用该引用相应的方法表现出的不同
条件:

1.必须有继承
2.子类必须要对父类的方法重写

函数重载
条件:

1.函数名必须相同
2.函数里面参数的个数相同
2.如果个数相同,类型不同

__tostring()方法

 1 class Ren
 2 {
 3     public $name;
 4     public $sex;
 5     function __tostring()   //可以输出类的一些描述
 6     {
 7         return "这个对象包含name和sex,一个Say方法";
 8     }
 9 }
10 $r = new Ren();
11 echo $r;

对象的克隆

1 $r->name = "张三";
2 $r1 = clone $r;     //克隆对象
3 echo $r->name;

克隆对象,然后修改内容

class Ren
{
    public $name;
    public $sex;
    function __clone()   //对象克隆的时候自动执行
    {
        $this->name = "李四";  //$this指复本(克隆出来的新对象)
    }
}
$r = new Ren();
$r->name = "张三";
$r1 = clone $r; //克隆对象
echo $r->name;   //输出内容为“张三”
echo $r1->name; //输出内容为“李四”
原文地址:https://www.cnblogs.com/zk0533/p/5442920.html