Наследование свойств

204
30 июля 2017, 10:06

Есть такой код:

<?php  
 
  class User { 
    public $userName;  
	private $userPassword; 
 
	 function __construct($userName, $userPassword) { 
	   $this->userName = $userName; 
		$this->userPassword = $userPassword; 
	 } 
 
	 function reg() { 
	   echo "<br> User with name $this->userName registrated"; 
	 } 
  } 
 
  class Car extends User { 
	 protected $userCar; 
 
    function __construct($userCar) { 
	   $this->userCar = $userCar; 
    } 
	  
	 function regCar() { 
	   echo "<br> Car $this->userCar registrated for user $this->userName"; 
	 } 
  } 
   
  $userName = 'The Tux'; 
  $userPassword = '123'; 
  $userCar = 'Subaru'; 
 
  $user = new User($userName, $userPassword);  
 
  $car = new Car($userCar); 
 
  $user->reg(); 
  $car->regCar(); 
  $car->reg();

Как в классе Car получить значение userName? Не совсем понял смысл наследования? Присваивать значение объекту: $car->userName = $user->userName? Или через конструктор класса Car?

Answer 1

Вы не верно понимаете наследование. И ваш пример действительно бессмысленный, при помощи него нельзя ничего изучить и понять зачем наследование нужно.

Приведу более понятный пример:

<?php
interface Info
{
    public function info();
}
abstract class Named
{
    protected $name;
    public function __construct($name)
    {
        $this->name = $name;
    }
    public function getName()
    {
        return $this->name;
    }
}
class User extends Named
{
    private $password;
    public function __construct($name, $password) {
        parent::__construct($name);
        $this->password = $password;
    }
}
class Car extends Named implements Info
{
    protected $owner;
    public function __construct($name, User $owner) {
        parent::__construct($name);
        $this->owner = $owner;
    }
    public function info() {
        return "This is car " . $this->getName() . ". Owner is user " . $this->owner->getName() . ".";
    }
}

Здесь класс Пользователь расширяет класс Именуемый и дополняет его дополнительным приватным свойством Пароль. Класс Машина расширяет класс Именуемый, дополняет его защищённым свойством Владелец и также может возвращать информацию о себе.

$user1 = new User("Ivan", "Qwe");
$car = new Car("Subaru", $user1);
$user2 = new User("Petr", "Asdf");
print_r([
    $user1->getName(),
    $car->getName(),
    $car->info(),
    $user2->getName(),
]);

Здесь print_r выведет следующее:

Array
(
    [0] => Ivan
    [1] => Subaru
    [2] => This is car Subaru. Owner is user Ivan.
    [3] => Petr
)

Если вы поймёте как оно работает, то первый, третий и четвёртый вопросы отпадут сами по себе

READ ALSO
Экранирование тега &lt;?php

Экранирование тега <?php

Как стоит экранировать <?php ? Например я хочу записать в файл

274
Автоматизация mysql

Автоматизация mysql

Доброго времени сутокПроблема следующая

215
Html Форма и ее php оброботчик

Html Форма и ее php оброботчик

Есть форма (текстовое поле textarea)В моей форме допустим Вы написали:

211
Как загрузить captcha-image в форму

Как загрузить captcha-image в форму

В своей форме использую InternetExplorerApplication

284