//面向对象三大特性 //一、封装 //目的:让类更加安全,不让外界直接访问类里面的成员变量 //做法:1.把成员变量变成私有 // 2.做一个方法来实现变量的取值或赋值,在里面加限制条件 //使用类里面提供的魔术方法也可以实现对私有成员的操作 //__set方法 //特点:会自动执行,把赋值语句中的变量名作为第一个参数,把变量值作为第二个参数调用 //__get方法 //特点:会自动执行,把取值语句中的变量名作为参数调用 //$r->setage=20; //$r->__set("name","张三"); $r->name="李四"; //执行语句会自动调用__set方法 $r->sex="女"; //每一个成员都可以使用 $r->age="100"; var_dump($r);
<?php //类:由众多对象抽象出来的 //对象:通过类实例化出来的 //定义类: class Info { const p = 3.1425926; //将某些类里面常用到的东西定义为常量,方便使用 public static $class; //static关键字定义静态的 public $code; protected $name; private $sex; static function Test() //静态方法 { echo self::$class; //调用自身类里面的静态成员 echo "静态方法!"; } function __construct($s) { $this->sex = $s; } function Say() { echo self::$class; //普通方法里面可以调用静态成员 echo "hello"; } function GetSex() { return $this->sex; } function SetSex($s) { $this->sex = $s; } function __set($n,$v) { $this->$n = $v; } function __get($n) { return $this->$n; } } //对象实例化 $r = new Info("女"); $r->code = "join"; $r->sex; /*Info::$class = "0305"; $r->Say();*/ /*Info::$class = "0305"; //访问静态成员 Info::Test();*/ //三大特性 //封装: //目的:为了让类更加安全,避免外界直接访问成员变量 //做法:1.把成员变量变为私有的 //2.通过方法(函数)来间接的操作成员变量 //继承 //概念:如果一个类有子类,那么该子类会继承父类的一切东西(私有成员访问不到) //在定义子类的时候需要加一个关键字:extends //特点:单继承,一个儿子只能有一个父亲,一个类只能有一个父类 //如果父类中有构造函数,子类在实例化的时候要按照父类构造函数的标准来实例化 //子类对父类方法的重写:在子类中写一个同样的方法 //final:用来修饰类,代表该类是一个最终类,该类无法被继承 /*class Test extends Info { public $birthday; function Run() { echo "run"; } function Say() { parent::Say(); //调用父类的Say()方法 echo "Test Say"; } } $t = new Test("女"); $t->code = "p001"; //echo $t->sex; $t->Say(); //$t->Run();*/ //静态成员 //类里面的普通成员是属于对象的,不是属于类的(调用的时候是用对象调用) //什么叫做静态的:类静态成员是属于类的,不是属于每个对象的 //定义静态成员用static关键字修饰 //静态方法里面无法调用普通成员 //静态方法可以调用静态成员,使用self关键字来调用 //self代表该类,$this代表该对象 ?>
<?php class Ren { public $name; public $sex; function Say() { echo "hello"; } /* function Say($a) { echo $a."hello"; } function Say($a,$b) { echo $a.$b."hello"; }*/ function __tostring() //可以输出类的一些描述 { return "这个对象包含变量name和sex,一个Say方法"; } function __clone() //对象克隆的时候自动执行 { $this->name="李四"; //$this指复本(克隆出来的新对象) } } class China extends Ren { function Say() { echo "你好"; } } //多态 //概念:当父类引用指向子类实例的时候,由于子类对父类函数进行了重写,导致我们在使用该引用去调用相应的方法表现出的不同 //条件:1.必须有继承 //2.子类必须要对父类的方法进行重写 /*$r = new Ren(); echo $r;*/ /*$r = new Ren(); //$r代表Ren类的引用 $r1 = new China(); //$r1代表China的引用*/ //Ren $r = new America(); //$r->Say(); //函数重载 //条件:1.函数名必须相同 //2.函数里面参数的个数不同 //如果个数相同,类型不同 /*$r = new Ren(); $r->Say();*/ //php是弱类型语言,所以没有重载 //php有可变参数的函数 //__tostring()方法 //对象的克隆 /*$r = new Ren(); $r->name = "张三"; $r1 = clone $r; //克隆对象 echo $r->name; echo $r1->name;*/ //var_dump($r1); ?>