1、PHP面向对象编程的基本实践name=$name;$this->sex=$sex;$this->age=$age;}publicfunctionsay(){echo'大家好,我叫'.$this->name.',今年'。$this->age.'岁,我的性别是'.$this->sex;}publicfunction__destruct(){$this->name=null;$this->sex=null;$this->age=null;}}//实例化“人”类$male=newHuman("张三","男","20");//调用"人"类的speaking方法$male->say();//输出结果:大家好,我叫张三,今年20岁,性别男?>2、PHP面向对象高级编程实践知识点:类继承、方法重写、访问控制、静态键词、final关键字、数据访问、接口、多态、抽象类2.1、类继承:extends关键字比如:一个操作员,一个版主,他们有人类共同的行为方式,但又各有不同的特长。因此,在编程时,需要为它们创建一个父类,并继承它们;name."\n";}publicfunctioneat(){echo"父类吃的方法\n";}}/**创建一个继承“human”类的“athlete”类*extends:关键字,继承某个类*/classSportextendsHuman{public$type;公共函数__construct($name,$type){$this->name=$name;//给父类的$name属性赋值$this->type=$type;}publicfunctionrun(){$this->say();//调用父类“speak”方法echo"我在跑步,我是会员".$this->type."Athlete.....\n";}}/**创建一个“host”类,继承“person”类*extends:关键字,继承一个类*/classHostextendsHuman{public$television;公共函数__construct($name,$television){$this->name=$name;$this->电视=$电视;}publicfunctionperform(){$this->eat();//调用父类“吃”方法echo"我在表演,我在".$this->television."某电视台主持人...\n";}}//实例化“运动员”类$nba=newSport("Jordan","Basketball");$nba->run();//实例化“主持人”类$tv=newHost("ZhangSan","北京卫视");$tv->perform();//输出结果://父类讲的方法,名字:乔丹,我在跑步,我是篮球运动员...//父类的吃法我在表演节目,我是北京卫视的主持人...?>2.2、方法重写:子类重写父类的方法say();//输出结果:子类的方法讲?>2.3、访问控制:public、protected、private关键字public:定义公共成员属性或方法,可以protected:定义受保护的成员属性或方法,只允许类本身或子类使用private:定义私有成员属性或方法,只允许类本身使用name="张三";echo$worker->name;?>2.4,static(静态)关键字1),static属性用来保存类的Public数据;2)、静态方法中只能访问静态属性或方法,不能使用$this伪变量;3)、通过new关键字可以在不实例化对象的情况下访问和使用静态成员;2.5,final关键字:成员方法不是允许改写,不允许继承例:1.父类“吃”方法,不希望子类改写;2.对于类“Athlete”,不希望它创建子类;Classrewriting";}}finalclassSportextendsHuman{publicfunctioneat(){echo"此时子类eating方法会报致命错误";}}//创建一个继承Sport类的类。此时,程序也会报致命错误,因为Sport类不允许创建子类classStudentextendsSport{public$name;}//实例化Sport类,调用eat()方法$nba=newSport();$nba->eat();//实例化Student类,给name属性赋负值$obj=newStudent();$obj->name="张三";//输出结果:Fatalerror:无法覆盖第15行******.php中的最终方法Human::eat()//致命错误:ClassStudent可能无法从第20行****.php中的最终类(Sport)继承?>2.6、数据访问:$this、self、parent关键字$this:伪变量,代表类本身,可以访问本类和父类中的成员属性和方法。self:访问类中的静态成员属性或方法parent:访问父类的成员属性或方法get();//输出结果:张三?>2.7,接口:put定义了不同类的通用行为方法,但没有具体实现,具体方法由子类实现;例如:人可以吃,动物可以吃,甚至有些植物也可以吃,只是吃的方式不同,所以这时候就需要定义一个接口类,具体的方法由子类来实现;定义接口关键字:interfaceimplement接口方法关键字:implementseat('rice');//实例化一个“动物”类$monkey=newAnimal();$monkey->eat('banana');//输出结果:I'meatingrice//It'seatingbanana?>2.8、多态性:比如接口A有B和C两个实现,B和C可以在接口中定义不同的方法实现A、这种现象称为多态性;在上面的例子中,ICanEat接口定义了一个eat()方法,人吃米饭,猴子吃香蕉。它们都实现了一个“吃”的方法,只是在吃的时候有不同的行为,这叫做多态;2.9、抽象类:介于接口的定义和类之间,允许类中的一些方法不被实现,而实现的一些方法具有相同的功能,不改变。但是,接口类不允许任何实现方法。例如:人和动物都有进食和呼吸的方法。除了吃法不同,呼吸的方法是一样的。这时候就需要定义一个抽象类来实现。定义一个抽象类关键字:abstract呼吸();}}//实例化“人类”类$people=newHuman();$people->eat('rice');//输出结果:我正在吃米饭Breathusetheair...?>3.PHP面向对象编程特训PHP语言特有的一些魔术方法:}publicfunction__toString(){return"当对象输出为字符串时,自动执行该函数";}publicfunction__invoke($value){echo"当对象作为函数被调用时,该函数自动执行"。$值;}/**当对象访问一个不存在的方法时,自动执行该函数。也称为“方法重载”*$fun:方法名*$param:传递的参数*/publicfunction__call($fun,$param){echo"call".$fun."方法不存在,传递的参数".implode(',',$param);}/**当对象访问一个不存在的静态方法时,自动执行该函数。*$fun:方法名*$param:传参*/staticfunction__callStatic($fun,$param){echo"Call".$fun."静态方法不存在,传参".implode(',',$参数);}publicfunction__get($key){echo"当读取对象中不可访问(未定义)属性的值时,会自动调用此函数。".$key."该属性不可访问或未定义";}publicfunction__set($key,$value){echo"当给对象中不可访问(未定义)的属性赋值时,会自动调用该函数。".$key."属性不可访问或未定义,value".$值;}publicfunction__isset($key){echo"当判断对象中的属性不存在时,会自动执行该函数。属性:".$key."值为undefined";}publicfunction__unset($key){echo"当对象中不存在的属性值被释放时,自动执行该函数。属性:".$key."值为undefined";}publicfunction__clone(){echo"当对象被克隆时,这个函数是自动执行的函数。";}publicfunction__destruct(){echo"当对象执行时,函数会自动执行";}}$obj=newObject();//实例化对象时,调用__construct()方法echo$obj;//当对象作为字符串输出时,调用__toString()方法$obj(123);//当对象作为函数调用时,执行__invoke()方法$obj->runTest();//当调用对象中不存在的方法时,执行__call()方法$obj::runTest();//当调用对象中不存在的静态方法时,执行__callStatic()方法$obj->name;//当调用对象中不存在的成员属性时,执行__get()方法$obj->name="张三";//给不存在的成员属性赋值时对象中不存在,执行__set()方法isset($obj->name)?1:0;//判断对象中不存在的成员属性时,执行__isset()方法unset($obj->name);//释放时g对象中不存在的属性值,执行__unset()方法$obj2=clone$obj;//对象被克隆时,执行__clone()方法//对象执行完毕后,执行__destruct()方法?>
