本文实例讲述了php创建对象的六种方式。分享给大家供大家参考,具体如下:

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

运行结果: