gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-10-31 22:47:15 25 4
gpt4 key购买 nike

我想在父类中有一个静态方法来创建我调用此方法的任何子类的实例。

一个更清楚的例子:

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::__construct\n"; }
}
class B extends A {
public function __construct() { echo " B::__construct\n"; }
}
class C extends B {
public function __construct() { echo " C::__construct\n"; }
}

$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

关于PHP:从父类中的静态方法调用子构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3391542/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com