Class 父类中的静态方法引用子类

Class 父类中的静态方法引用子类,class,oop,inheritance,Class,Oop,Inheritance,假设我有两个子类(psuedo代码): 男.级: include Person.class; class Male extends Person { ... } 女.班级: include Person.class; class Female extends Person { ... } 最后我有一个基类: Person.class: class Person { static function makePersonBySettings(settings) {

假设我有两个子类(psuedo代码):

男.级:

include Person.class;

class Male extends Person {
    ...
}
女.班级:

include Person.class;

class Female extends Person {
    ...
}
最后我有一个基类:

Person.class:

class Person {

    static function makePersonBySettings(settings) {
        var person;

        if(settings.gender == 'male') {
            person = new Male(settings.name);
        }
        else if(settings.gender == 'female') {
            person = new Female(settings.name);
        }

        return person;
    }

}
父级的静态方法取决于知道什么是Male.class和Female.class。我无法在Parent.class顶部导入子类(例如,
import Male.class
),因为子类依赖于了解父类


解决此问题的最佳方法是什么?

通过创建包含工厂方法的专用类,可以将工厂方法(makePersonBySettings)与父类解耦

class Person {

    static function makePersonBySettings(settings) {

        var person;

        person = new self(settings.name);

        return person;
    }

}
self
将引用您的子对象

Male::makePersonBySettings(设置)
将返回一个
Male
对象