Во-первых, вы не должны обращаться к суперглобалам, чтобы получить объект БД. Вместо этого перейдите в конструктор.
Я добавил свойство protected
$db
в класс, что означает, что к нему нельзя получить доступ вне класса (но потомки могут получить к нему доступ).
Затем в дочерних классах вы можете получить доступ к свойству $db
с помощью $this->db
, поскольку класс является потомком car
.
Некоторые другие незначительные предложения:
- Я бы предложил заглавную букву в первой букве имени класса
- Нет необходимости заключать скобки в операторы возврата
- Вместо передачи имени класса
whichValve
,передать построенный объект (таким способом отладить код намного проще)
class car {
protected $db;
function __construct($db){
$this->db = $db;
}
}
class engine extends car {
protected $valve;
function whichValve( $which ){
$this->valve = new $which();
var_dump( $this->valve->motion() );
}
}
class valve1 extends engine {
function motion(){
return $this->db->GetRow("query for valve 1");
}
}
class valve2 extends engine {
function motion(){
return $this->db->GetRow("query for valve 2");
}
}