PHP創建對象的6種方式


<?php

/**

 * PHP創建對象的六種方式

 */

class Person{

  private $name = 'bruce';

  public function getName(){

    return $this->name;

  }

  public static function getObjBySelf(){

    return new self();

  }

  //動態延遲綁定,能識別調用者

  public static function getObjcByStatic(){

    return new static();

  }

}

//Person子類 Teacher

class Teacher extends Person{

  public static function getObjByParent(){

    return new parent();

  }

}

 

//1、new 類名();創建對象

$obj1 = new Person();//等價於寫法 $obj1 = new Person;

echo '類名:'.get_class($obj1).'<br>';

echo $obj1->getName().'<hr>';

 

//2、將類名字符串賦值給一個變量,通過變量創建

$clsName = 'Person';

$obj2 = new $clsName();

echo '類名:'.get_class($obj2).'<br>';

echo $obj2->getName().'<hr>';

 

//3、通過對象實例創建對象

$obj3 = new $obj2();

echo '類名:'.get_class($obj3).'<br>';

echo $obj3->getName().'<hr>';

 

//4、通過 new self()

//$obj4 = (new $obj3())->getObjBySelf();

$obj4 = Person::getObjBySelf();

echo '類名:'.get_class($obj4).'<br>';

echo $obj4->getName().'<hr>';

 

//5、通過 new parent()

$obj5= Teacher::getObjByParent();

echo '類名:'.get_class($obj5).'<br>';

echo $obj5->getName().'<hr>';

 

//6、通過 new static();

$obj6 = Person::getObjcByStatic();

echo '類名:'.get_class($obj6).'<br>';//類名:Person

echo $obj6->getName().'<hr>'; //bruce

//當用子類去調用時候,發現static自動識別當前調用者(靜態延遲綁定),返回當前調用者對象

$obj7 = Teacher::getObjcByStatic();

echo '類名:'.get_class($obj7).'<br>';//類名:Teacher

echo $obj7->getName().'<hr>';//bruce

$obj8 = Person::getObjBySelf();

echo '類名:'.get_class($obj8).'<br>';//類名:Person

echo $obj8->getName().'<hr>';

//new self()在子類中調用依舊返回原來父類的綁定

$obj9 = Teacher::getObjBySelf();

echo '類名:'.get_class($obj9).'<br>';//類名:Person

echo $obj9->getName().'<hr>';

運行結果:

 

轉載地址:https://www.cnblogs.com/heyue0117/p/11825361.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM