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; //输出内容为“李四”