一、面向对象关键字1、instanceof操作符:对象是否属于一个类(检查继承),如下:classPerson{};类学生扩展人{};$p=新人;$s=新学生;echo$pinstanceofStudent;//falseecho$sinstanceofStudent;//trueecho$sinstanceofPerson;//true2.final关键字:不定义常量,不能用final修改成员属性a.final可以修改aclass,不能被扩展(不能有子类),即final类,如下:finalclassPerson{...};b.final可以修饰方法,this方法在子类中不能被重写(不能被扩展),即final方法,如下:publicfinalfunctionsay(){...};//子类不能用parent::say()调用;3.static关键字:将一个类中多个实例对象的公共属性/方法存放在初始化静态段中,以节省内存空间b.当类第一次出现,加载的时候,静态成员已经加载到内存中了,也就是说你也可以在不创建实例对象的情况下访问这个成员//echoPerson::countryc.静态成员必须使用类来访问//echoPerson::countryd。静态成员可以被访问或赋值,赋值后所有实例都会发生变化,self关键字可以代表本类中的类名,类似于这个e。静态成员一旦加载,只有在脚本结束时才会释放。这个关键字可以修饰属性和方法,但不能修饰类。如果不带$this调用该方法,则默认为静态方法。声明静态方法的时候会有错误提示,但是很方便,尽量用(效率高)。G。上面f项的缺点如下:(1)占用内存,脚本结束后才释放(2)静态方法只能使用静态属性,因为不能使用$this4.const关键字a.常量存储区是一个初始化的静态段b.define只能在类外声明常量,报内部错误。c.const只能修改成员属性,即定义常量。注意:(1)常量使用大写字母,不是$(2)声明时必须有初值(3)Access方法同static(self::name),但只能读2。魔术方法1.自动调用,只存在PHP语言2.以“__”开头3.方法名固定4.不写就不存在,不存在没有默认函数1.__toString():将对象转化为自定义字符串(类似js),该方法不能有参数,必须返回一个字符串(常用于echo/print之后),如下:classPerson{function__toString(){返回“$$$$
”;}};$p=新人;echo$p;//$$$$2.__clone():a.克隆对象类Person{function__toString(){return"$$$$
";}};$p=新人;$p2=克隆$p;b.魔术方法:(1)克隆对象时自动调用(2)功能:同构造方法,初始化新克隆的对象(3)该方法中,$this代表一个副本,可以初始化($that有时可以代表原文,部分版本可以使用)classPerson{var$name;函数__construct($name){$this->name=$name;}functionsay(){echo$this->name."
";}函数__clone(){$this->name="ni";}};$p=newPerson("wo");$p->say();//wo$p2=clone$p;$p2->说();//ni3.__call():当调用对象中不存在的方法时,会自动调用b.有两个参数,第一个参数是不存在的方法名,第二个是不存在的方法的参数数组c。功能:批量处理类似功能的方法或对不存在的方法完成提示功能classPerson{var$name;函数__construct($name){$this->name=$name;}functionsay(){echo$this->name."
";}函数__clone(){$this->name="ni";}function__call($method,$args){echo"方法{$method}(),参数为";print_r($args);echo"不存在!
";}};$p=newPerson("wo");$p->eat("肉","米饭");//方法eat(),参数为Array([0]=>meat[1]=>rice)不存在!d.可以用来实现重载(类似JS函数的arguments方法)classFoo1{publicfunction__call($name,$arguments){if($name==”doStuff”){/***其实不仅如此只能使用第一个参数类型,参数个数和参数顺序也可以判断,所以和C++一样强数据类型语言的重载效果是一样的!*/if(is_int($arguments[0])){$this->doStuffForInt($arguments[0]);}elseif(is_string($arguments[0])){$this->doStuffForString($arguments[0]);}}}privatefunctiondoStuffForInt($a){echo"doStuffForInt()方法被执行";}privatefunctiondoStuffForString($a){echo"doStuffForString()方法执行完毕";}}$foo1=newFoo1;$foo1->doStuff('1');//执行doStuffForString()方法3.单态/单例/单例设计模式的概念:一个类只能创建一个对象,它最适合PHP的设计模式方法:a.先将构造函数私有化,使类不能创建对象,如下:}functionsay(){echo"$$$$
";}};$p=newPerson;//报错b.定义(静态)静态方法,在类中创建类的对象,外部使用类调用创建对象,但这仍然为每次调用创建一个新对象,而不是只创建一个对象,如下所示:返回$对象;}函数__destruct(){echo"######
";}functionsay(){echo"$$$$
";}};$p=Person::createObj();//######$p=Person::createObj();//######$p=Person::createObj();//######$p=Person::createObj();//######$p->say();//$$$$c。将新建对象的变量$obj设置为静态属性(唯一一个),即可满足要求,该类只能创建一个对象,如下:classPerson{static$obj=null;私有函数__construct(){}静态函数createObj(){if(is_null(self::$obj)){self::$obj=newself;}返回自我::$对象;}函数__destruct(){echo"######
";}函数说(){回声“$$$$
";}};$p=Person::createObj();$p=Person::createObj();$p=Person::createObj();$p=Person::createObj();//由于只创建了一个类,所以只输出一次######$p->say();//$$$$
