PHP 对象及其三大特性
//面向过程 //类和对象 //对象:任何东西都可以成为对象,类实例化出来的东西 //类:对所有同类的对象抽象出来的东西 //info:code,name,sex,nation,birthday //对象:一条具体的信息:p001,张丹,女,汉,1990-12-04 //定义类 class Ren { public static $class; private $Name; //成员变量 private $age; private $height; var $sex;//一般不要给成员变量赋值 const π=3.1425926;//将某些类里面常用的 定义为常量 static function test()//静态方法 { echo self::$class; echo "静态方法"; } function __construct($s) { $this->sex= $s; } function Run()//成员函数(方法) { echo "这个人正在奔跑"; } function Say() { echo self::$class; //echo $Name."正在说话";//错误写法 echo $this->Name."正在说话";//正确写法,$this表示该对象 } function __destruct()//析构函数,对象销毁前执行 { echo "该对象销毁了"; } /*function SetAge($a) { if($a>10 && $a<50) { $this->age=$a; } } function GetAge($a) { if($a>10 && $a<50) { $this->age=$a; } }*/ function __set($name,$value) //对类里面的私有成员进行赋值的魔术方法 { $this-> $name=$value; if($name=="age" && $value>20 && $value<50) { $this->age=$a; } } function __get($Name) //对类里面的私有成员进行取值的魔术方法 { return $this->$Name; } } //使用类 //1.实例化对象 $r=new Ren("男"); //2.给成员变量赋值(调用成员变量) $r->Name='张良';//给对象的name赋值 //var_dump($r); //3.调用成员方法 $r->Run();//执行成员方法 //访问修饰符 //1.如果要加访问修饰符,要去掉var //2.三种:public公有的,protected受保护的,private私有的 //3.如果不加访问修饰符,默认是共有的 //$this引用 $r->Say(); //$this表示该对象(哪个对象调用) ,不是代表该类 //构造函数 //function__construct() //{ //} //1,写法特殊 //2.执行特殊,再造对象时自动执行 //作用:对对象做初始化操作 //面向对象三大特性 //封装,让类更加安全 //做法:1.把成员变量变成私有的 //2.做一个方法来实现变量的取值和赋值,加一些限制条件 $r->SetAge(40); //取age值的方法 echo $r->GetAge(); //使用魔术方法 $r->name ="李思";//执行该语句会自动调用__set方法 //__set() 特点:会自动执行,把赋值语句中的变量名作为第一个参数,把变量值作为第二个参数调用__set方法 //__get() 特点:会自动执行,把取值语句中的变量名作为参数调用__get方法 //继承 //概念:如果一个类有子类,那么该子类会继承父类的一切东西(不包括私有成员) //在定义子类的时候需要加一个关键字 extends //特点:单继承,一个儿子只能有一个父亲,一个类只能一个父类 //如果父类中有构造函数,子类在实例化的时候要按父类构造函数的标准来实例化 //子类对父类的方法的重写,在子类里写一个同样的方法 //final:用来修饰类,代表该类是一个最终类,该类无法被继承 class Test extends Ren { public $birthday; function Run() { echo "running"; } function Say() { parent::Say();//调用父类的Say()方法,parent只能在子类中使用 echo "saying"; } } $t=new Test("女"); $t->__get(); $t->Say(); //静态成员 //普通成员是属于对象的,不是属于类的 (调用的时候是用对象调用) //什么叫静态的:类静态成员是属于类的,不是属于每个对象的 //定义静态成员用static关键词修饰 //静态方法里面不能调用普通成员 //静态方法调用静态成员,要使用self关键词 //self表示该类 $this表示该对象 //普通方法里面可以调用静态成员 Ren::$class="0305";//访问静态成员 echo Ren::$class="0305"; //多态 //概念:当父类引用指向子类实例的时候,由于子类对父类函数进行了重置,导致我们在使用该引用去调用相应的方法表现出的不同 //条件:必须有继承 //2.子类必须对父类的方法进行重写 class Rene { public $name; public $sex; function Say() { echo "你好a "; } function Say($a) { echo $a."你好a "; } function Say($a,$b) { echo $a.$b."你好a "; } function __tostring()//输出类的描述 { return "这个对象包括变量name和sex,一个say方法"; } function __clone()//克隆对象时自动执行 { $this->name="事发后";//this 指副本 (克隆出来的新对象) } } class China extends Rene { function Say() { echo "你好"; } } $q=new Rene(); $q1=new China(); //函数重载 //2.函数里面参数的个数不同 //3.如果个数相同,类型不同 $r=new Rene(); $r->Say(); //PHP是弱类型语言,所以没有重载 //PHP有可变参数的函数 //__tostring() //对象的克隆 $r=new Rene(); $r->name="福建"; $r1=clone $r;//克隆对象 echo $r->name; echo $r1->name; var_dump($r1); ?>