PHP面向对象

static静态关键字
  声明类特点和办法为静态,不能够经过类的实例直接拜访。
  类的静态特点不能经过->直接拜访,能够经过 o b j : : obj:: obj::name来拜访。
  静态办法能够经过类的实例来拜访。
  <?php
  classPerson
  {
  publicstaticKaTeX parse error: Expected 'EOF', got '}' at position 71: …sissay";   }   }̲   echoPerson::name;//miss
   p e r s o n = n e w P e r s o n ( ) ;     e c h o person=newPerson();   echo person=newPerson();  echoperson:: n a m e ; / / m i s s 经 过 类 实 例 : : 静 态 变 量 来 拜 访     name;//miss经过类实例::静态变量来拜访    name;//miss::访  person->say();//thisissay类实例拜访静态办法
  抽象类
  抽象类不能实例化,能够被其他类承继。
  只要类中有一个办法是抽象办法,则该类便是抽象类。
  子类承继了抽象类,子类完成父类抽象办法的拜访操控润饰符只能持平或更宽松。
  接口
  接口指定了完成该接口的类有必要完成的办法,在接口中不需要界说这些办法的具体完成。
  接口中一切办法有必要是公有的(public).
  接口能够被子接口承继。
  接口中能够界说常量。
  匿名内部类
  匿名内部类被嵌入到普通的类中时,无法运用类的特点和办法,能够extends外部类,来运用外部类的特点和办法。
  <?php   classOuter   {   public$name=”Miss”;   protected$age=10;   private$code=201;   publicfunctionsay()   {   returnnewclassextendsOuter{   publicfunctionsay()   {   echo"nageis".$this->age;//10   }   };   }   }   $outer=newOuter();   $inner=$outer->say();   $inner->say();   #重载   *PHP的重载是指动态的创立类的特点和办法,与其他语言的重载(同一个办法名,不同的办法参数)不是同一个意思。   *只要调用未界说或者不行的类的特点和办法时,重载的戏法函数才会调用。   >类的不行拜访的特点的重载   <?php   classPerson   {   private$data=[];//用来存储不行拜访的特点和值   publicfunction__set($name,$value)   {   $this->data[$name]=$value;   }   publicfunction__get($name)   {   if(array_key_exists($name,$this->data))   {   return$this->data[$name];   }   returnnull;   }   publicfunction__isset($name)   {   returnarray_key_exists($name,$this->data);   }   publicfunction__unset($name)   {   unset($this->data[$name]);   }   }   $person=newPerson();   $person->name=“hello”;   echo“nameis“.$person->name.”<br>“;//hello   echo“ageis“.$person->age.”<br>“;//没有值   var_dump(isset($person->name));//true   var_dump(isset($person->age));//false   unset($person->name);   echo“nameis“.$person->name.”<br>“;//没有值   >类的不行拜访的办法的重载   <?php   classPerson   {   publicfunction__call($funName,$arguments)   {   echo“functionnameis“.$funName.”argumentsis“.join(‘,’,$arguments);   }   publicfunction__callStatic($funcName,$arguments)   {   echo"staticfunctionnameis".$funName."argumentsis".join(',',$arguments);   }   }   $person=newPerson();   $person->say(“Miss”,”Eddy”);//functionnameissayargumentsisMiss,Eddy   Person::phone(“Miss”,18811773009);//staticfunctionnameisargumentsisMiss,18811773009   #遍历目标   >目标能够运用foreach来便利特点。便利的特点为当前可见特点。   <?php   classPerson   {   private$code=20169107;   protected$age=21;   public$name="Miss";   public$class=1601;   publicfunctionsay()   {   foreach($thisas$key=>$value)   {   echo$key."=>".$value."<br>";   }   }   }   $person=newPerson();   foreach($personas$key=>$value)   {   {   echo$key.”=>”.$value.”<br>“;   }   }   $person->say();   //输出   在目标外,只要public特点可见   name=>Miss   class=>1601   在目标内,一切特点可见(不考虑承继)   code=>20169107   age=>21   name=>Miss   class=>1601   >完成Iterator接口   <?php   classPersonimplementsIterator   {   private$arr=[];   publicfunction__construct($arr)   {   $this->arr=$arr;   }   publicfunctioncurrent()   {   $current=current($this->arr);   echo“current=”.$current.”<br>“;   return$current;   }   publicfunctionkey()   {   $key=key($this->arr);   echo“keyis“.$key.”<br>“;   return$key;   }   publicfunctionnext()   {   $next=next($this->arr);   echo“nextis“.$next.”<br>“;   return$next;   }   publicfunctionrewind()   {   echo“rewinding<br>“;   rewind($this->arr);   }   publicfunctionvalid()   {   echo“validatingandcurrentis”.$this->current();   if($this->current()!=false)   {   returntrue;   }   returnfalse;   }   }   $person=newPerson([12,11,10]);   foreach($personas$key=>$value)   {   {   echo$key.”=>”.$value.”<br>“;   }   }   $person->say();   //输出   rewinding   current=12   validatingandcurrentis12current=12   current=12   keyis0   0=>12   nextis11   current=11   validatingandcurrentis11current=11   current=11   keyis1   1=>11   nextis10   current=10   validatingandcurrentis10current=10   current=10   keyis2   2=>10   nextis   current=   validatingandcurrentiscurrent=   #Final关键字   *final只能润饰类和办法,不能润饰特点。润饰类则该类无法被承继,润饰办法,则该办法无法被重写。   #目标仿制   *能够运用clone进行目标的仿制,目标的仿制为一个浅复制,一切的引证特点仍指向本来的值。   *当目标仿制完成后,假如类中有__clone戏法办法,该办法将会在新复制的目标中进行调用。   >clone的用法:   <?php   classInner{   public$name=”miss”;   }   classOuter{   public$inner;   public$age=10;   }   $outer=newOuter();   $outer->inner=newInner();   $anoter=clone$outer;   $anoter->inner->name=”eddy”;   $anoter->age=20;   echo$outer->age;//10   echo$outer->inner->name;//eddy   *###深复制的完成方式   >运用__clone戏法办法:   <?php   classInner{   public$name=”miss”;   }   classOuter{   public$inner;   public$age=10;   publicfunction__clone()   {   $this->inner=clone$this->inner;   }   }   $outer=newOuter();   $outer->inner=newInner();   $anoter=clone$outer;   $anoter->inner->name=”eddy”;   $anoter->age=20;   echo$outer->age;//10   echo$outer->inner->name;//miss此处在目标内进一步复制了引证变量   >目标的序列化和反序列化:   <?php   classInner{   public$name=”miss”;   }   classOuter{   public$inner;   public$age=10;   }   $outer=newOuter();   $outer->inner=newInner();   //$anoter=clone$outer;   $serializeOuter=serialize($outer);   $anoter=unserialize($serializeOuter);   $anoter->inner->name=”eddy”;   $anoter->age=20;   echo$outer->age;//10   echo$outer->inner->name;//miss不会改变复制目标的引证变量   #目标比较   *==假如两个目标的特点和特点值持平,而且为同一个类的实例,则持平   *===假如两个目标变量指向同一个实例(目标的赋值、复制和引证),则持平。   <?php   functioncompare(&$obj1,&$obj2)   {   echo“obj1==obj2:”.($obj1==$obj2).”<br>“;   echo“obj1!=obj2:”.($obj1!=$obj2).”<br>“;   echo“obj1===obj2:”.($obj1===$obj2).”<br>“;   echo“obj1!==obj2:”.($obj1!==$obj2).”<br>“;   }   classPerson{   public$name;   }   $personOne=newPerson();   $personOne->name=”hello”;   $personTwo=$personOne;   $personThree=newPerson();   $personThree->name=”hello”;   $personFour=&$personOne;   echo‘<br>compare($personOne,$personTwo):<br>‘;   compare($personOne,$personTwo);   echo‘<br>compare($personOne,$personThree):<br>‘;   compare($personOne,$personThree);   echo‘<br>compare($personOne,$personFour):<br>‘;   compare($personOne,$personFour);   //输出   compare($personOne,$personTwo):   obj1==obj2:1   obj1!=obj2:   obj1===obj2:1   obj1!==obj2:   compare($personOne,$personThree):   obj1==obj2:1   obj1!=obj2:   obj1===obj2:   obj1!==obj2:1   compare($personOne,$personFour):   obj1==obj2:1   obj1!=obj2:   obj1===obj2:1   obj1!==obj2:   #类型束缚   [类型束缚具体介绍](https://segmentfault.com/a/1190000007226476)   #后期静态绑定   [后期静态绑定具体介绍](https://www.jb51.net/article/136794.htm)   #目标和引证   *php的引证便是另取了一个别号,两个不同的变量称号指向相同的内容。   *当目标作为参数传递、回来和赋值给另一个变量时,这些都不是目标的引证,仅仅他们都保存这一个和本来目标相同标识符的复制。   <?php   classPerson{   public$name;   }   classHero{   public$name;   }   $personOne=newPerson();   $personOne->name="Miss";   $personTwo=$personOne;   $personTwo->name="eddy";   echo$personOne->name;//eddy   functiongetAnoter($person)   {   $person->name="eddy";   }   getAnoter($personOne);   echo$personOne->name;//eddy   functiongetCopy($person)   {   $person=newHero();   $person->name="Jack";   return$person;   }   $hero=getCopy($personOne);   echo$hero->name.'<br>';//hero   echo$personOne->name;//Miss   functiongetRef(&$person)   {   $person=newHero();   $person->name="Jack";   return$person;   }   $hero=getRef($personOne);   echo$hero->name.'<br>';//Jack   echo$personOne->name;//Jack
  目标序列化
  序列化目标,能够运用serialize()函数回来的一个字符串来表明。序列化目标将会保存目标一切的变量、类的称号,可是不会保存目标的办法、类的常量、静态变量。
  反序列化,能够运用unserialize(),可是这个目标应在反序列化之前界说。因而当在另一个文件中反序列化目标时,能够经过include或require引进包含该类的文件文件或者运用
  spl_autoload_register()来完成。
  sleep和wakeup戏法办法
  能够运用sleep()和wakeup()戏法办法,对序列化和反序列化事情挂钩子。还能够运用__sleep()办法序列号目标的部分变量。
  __wakeup
  unserialize在反序列化之前,会查看类中是否存在一个__wakeup的办法,如存在会优先调用。
  __sleep
  同理,在序列化之前,调用__sleep办法,该办法回来一个包含目标应该被序列化的特点的数组。关于较大的目标,该办法能够将目标部分保存。
  classPerson{
  public n a m e ;     p u b l i c name;   public name;  publicyear;
  privateKaTeX parse error: Expected group after '_' at position 22: … publicfunction_̲_wakeup()   {  …name)
  {
   t h i s − > n a m e = this->name= this>name=name;
  }
  }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值