php创建对象的六种方式,你知道的有几种?

  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>';

输出结果:

posted @ 2017-08-18 20:13  mvvp  阅读(470)  评论(0编辑  收藏  举报