parent :: method используется только для доступа к родительским методам, которые вы переопределили в своем подклассе, или к статическим переменным, таким как:
class Base
{
protected static $me;
public function __construct ()
{
self::$me = 'the base';
}
public function who() {
echo self::$me;
}
}
class Child extends Base
{
protected static $me;
public function __construct ()
{
parent::__construct();
self::$me = 'the child extends '.parent::$me;
}
// until PHP 5.3, will need to redeclare this
public function who() {
echo self::$me;
}
}
$objA = new Base;
$objA->who(); // "the base"
$objB = new Child;
$objB->who(); // "the child extends the base"
Вы, вероятно, хотите правильный подкласс. Не создавайте подкласс в конструкторе базового класса, который переворачивает все виды лучших практик ООП вверх ногами (слабая связь и т. Д.), А также создает бесконечный цикл. (new ContactInformation () вызывает конструктор Username, который создает новую ContactInformation (), которая ...).
Если вы хотите подкласс, что-то вроде этого:
/**
* Stores basic user information
*/
class User
{
protected $id;
protected $username;
// You could make this protected if you only wanted
// the subclasses to be instantiated
public function __construct ( $id )
{
$this->id = (int)$id; // cast to INT, not string
// probably find the username, right?
}
}
/**
* Access to a user's contact information
*/
class ContactInformation extends User
{
protected $mobile;
protected $email;
protected $nextel;
// We're overriding the constructor...
public function __construct ( $id )
{
// ... so we need to call the parent's
// constructor.
parent::__construct($id);
// fetch the additional contact information
}
}
Или вы можете использовать делегата, но тогда методы ContactInformation не будут иметь прямого доступа к свойствам имени пользователя.
class Username
{
protected $id;
protected $contact_information;
public function __construct($id)
{
$this->id = (int)$id;
$this->contact_information = new ContactInformation($this->id);
}
}
class ContactInformation // no inheritance here!
{
protected $user_id;
protected $mobile;
public function __construct($id)
{
$this->user_id = (int)$id;
// and so on
}
}