Проверять на существование не имеет смысла, т.к. метод getPrice объявлен в computerInfo.
Я бы переписал этот синтетический пример как то так:
<?php
class computer {
public function __get($name) {
if(class_exists($name)){
$this->{$name} = new $name();
return $this->{$name};
}
return null;
}
}
abstract class computerInfo {
protected $price;
public function getPrice() {
return $this->price;
}
}
class hardware extends computerInfo {
public function __construct() {
$this->price=40000;
}
}
class software extends ComputerInfo {
public function __construct() {
$this->price=15000;
}
}
$computer = new computer;
print $computer->software->getPrice();
print "\r\n <br />";
print $computer->hardware->getPrice();