trNote
  1 <?php
  2 /**
  3  * PHP创建对象的六种方式
  4  * Created by PhpStorm.
  5  * User: fork
  6  * Date: 2017/8/18/018
  7  * Time: 19:37
  8  */
  9 
 10 
 11 class Person{
 12 
 13     private $name = \'bruce\';
 14 
 15 
 16     public function  getName(){
 17        return $this->name;
 18     }
 19 
 20 
 21     public static function getObjBySelf(){
 22         return new self();
 23 
 24     }
 25 
 26 
 27 
 28     //动态延迟绑定,能识别调用者
 29     public static  function  getObjcByStatic(){
 30         return new static();
 31     }
 32 }
 33 
 34 
 35 //Person子类  Teacher
 36 
 37 class Teacher extends  Person{
 38     public static  function getObjByParent(){
 39         return new parent();
 40     }
 41 }
 42 
 43 
 44 
 45 //1、new 类名();创建对象
 46 $obj1 = new Person();//等价于写法  $obj1 = new Person;
 47 
 48 echo \'类名:\'.get_class($obj1).\'<br>\';
 49 
 50 echo $obj1->getName().\'<hr>\';
 51 
 52 
 53 
 54 //2、将类名字符串赋值给一个变量,通过变量创建
 55 $clsName = \'Person\';
 56 $obj2 = new $clsName();
 57 echo \'类名:\'.get_class($obj2).\'<br>\';
 58 echo $obj2->getName().\'<hr>\';
 59 
 60 
 61 //3、通过对象实例创建对象
 62 $obj3 = new $obj2();
 63 echo \'类名:\'.get_class($obj3).\'<br>\';
 64 echo $obj3->getName().\'<hr>\';
 65 
 66 
 67 
 68 //4、通过 new self()
 69 //$obj4 = (new $obj3())->getObjBySelf();
 70 $obj4 = Person::getObjBySelf();
 71 echo \'类名:\'.get_class($obj4).\'<br>\';
 72 
 73 echo $obj4->getName().\'<hr>\';
 74 
 75 //5、通过 new parent()
 76 $obj5= Teacher::getObjByParent();
 77 echo \'类名:\'.get_class($obj5).\'<br>\';
 78 echo $obj5->getName().\'<hr>\';
 79 
 80 
 81 //6、通过 new static();
 82 $obj6 = Person::getObjcByStatic();
 83 echo \'类名:\'.get_class($obj6).\'<br>\';//类名:Person
 84 echo $obj6->getName().\'<hr>\'; //bruce
 85 
 86 //当用子类去调用时候,发现static自动识别当前调用者(静态延迟绑定),返回当前调用者对象
 87 $obj7 = Teacher::getObjcByStatic();
 88 echo \'类名:\'.get_class($obj7).\'<br>\';//类名:Teacher
 89 echo $obj7->getName().\'<hr>\';//bruce
 90 
 91 
 92 
 93 $obj8 = Person::getObjBySelf();
 94 echo \'类名:\'.get_class($obj8).\'<br>\';//类名:Person
 95 echo $obj8->getName().\'<hr>\';
 96 
 97 //new self()在子类中调用依旧返回原来父类的绑定
 98 $obj9 = Teacher::getObjBySelf();
 99 echo \'类名:\'.get_class($obj9).\'<br>\';//类名:Person
100 echo $obj9->getName().\'<hr>\';

输出结果:

分类:

技术点:

相关文章:

  • 2021-12-06
  • 2021-12-14
  • 2021-12-14
  • 2021-10-20
  • 2021-05-03
  • 2021-11-26
  • 2021-08-17
  • 2021-07-22
猜你喜欢
  • 2021-10-20
  • 2021-12-02
  • 2021-10-20
  • 2021-06-23
  • 2021-11-05
  • 2021-05-24
相关资源
相似解决方案