【发布时间】:2015-01-16 21:22:46
【问题描述】:
使用通用示例:我有一个名为“Person”的类以及扩展 Person 的子类“Artist”和“Barber”。 'Person' 的构造函数根据键或 slug 从 SQL 数据库中提取有关此人的信息。
在大多数情况下,代码知道它正在创建的人的子类,即:
$jeff = new Barber( 'jeff' );
但有时我的代码不知道该人的子类是什么,但必须从他们的 SQL 行中获取。
我想做的是在“Person”的构造函数中放入一些东西,这样如果调用泛型,在它提取 SQL 数据后,它会检查“作业”列并将对象分配给子类。所以它看起来像:
class Person {
public function __construct( $name ) {
$info = get_from_sql( $name ); // function that returns this person's SQL row as an associative array
if( ( get_class( $this ) == 'Person' ) && ( $info['job'] == 'Barber' ) ) {
[[[something here that will change this 'Person' to subclass 'Barber']]]
}
}
}
class Artist extends Person {
}
class Barber extends Person {
}
有没有办法将这个对象从超类构造函数中分配给一个子类,这样如果我调用这个......
$jeff = new Person( 'jeff' );
...'jeff' 行的 'job' DB 列表明他是理发师,$jeff 对象的类型为 Barber 而不仅仅是通用类型 Person?
(如果有一些非常简单的方法可以做到这一点,请原谅我......我基本上是自学成才的,我在这里搜索过,只找到了 Java 和 Python 的答案,这对我都没有帮助...... .)
【问题讨论】:
-
这个问题在这里得到解答:stackoverflow.com/questions/6622214/…
标签: php oop inheritance