加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

PHP:从父方法中的静态方法调用子构造函数

发布时间:2020-12-13 13:26:33 所属栏目:PHP教程 来源:网络整理
导读:我希望在父类中有一个静态方法,它创建我调用此方法的子类的实例. 一个让这个更清晰的例子: class parent { public static method make_objects($conditions){ for (...){ // here i want to create an instance // of whatever subclass i am calling make_
我希望在父类中有一个静态方法,它创建我调用此方法的子类的实例.

一个让这个更清晰的例子:

class parent {
    public static method make_objects($conditions){
        for (...){
            // here i want to create an instance
            // of whatever subclass i am calling make_objects on
            // based on certain $conditions
        }
    }
}

class sub extends parent{
    ...
}

$objects = sub::make_objects($some_conditions);
从php 5.3开始,您可以使用 static关键字
<?php
class A {
  public static function newInstance() {
    $rv = new static();  
    return $rv;
  }
}
class B extends A { }
class C extends B { }

$o = A::newInstance(); var_dump($o);
$o = B::newInstance(); var_dump($o);
$o = C::newInstance(); var_dump($o);

版画

object(A)#1 (0) {
}
object(B)#2 (0) {
}
object(C)#1 (0) {
}

编辑:另一个(类似的)例子

<?php
class A {
  public static function newInstance() {
    $rv = new static();  
    return $rv;
  }

  public function __construct() { echo " A::__constructn"; }
}
class B extends A {
  public function __construct() { echo " B::__constructn"; }
}
class C extends B {
  public function __construct() { echo " C::__constructn"; }   
}

$types = array('A','B','C');
foreach( $types as $t ) {
  echo 't=',$t,"n";
  $o = $t::newInstance();
  echo '  type of o=',get_class($o),"n";
}

版画

t=A
 A::__construct
  type of o=A
t=B
 B::__construct
  type of o=B
t=C
 C::__construct
  type of o=C

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读