PHP5. Обращение к переменным родительского класса. Два способа

Как можно получить доступ дочернего класса к переменным родительского класса?

Способ первый: необходимо несколько условий. 1 - переменные в родительском классе должны быть объявлены как protected, 2 - при объявлении дочернего конструктора, необходимо также объявить родительский конструктор, 3 - соответственно, обращаемся к переменной родительского класса как ко внутренней переменной $this->variable;

Способ второй: 1 - переменные в родительском классе могут быть закрытыми (private), 2 - необходимо создать методы, позволяющие получить доступ к переменным из дочернего класса, 3 - при объявлении дочернего конструктора, необходимо также объявить родительский конструктор, 4 - соответственно, обращаемся к переменной родительского класса через соответствующие методы parrent::getVariable();

Ниже приведен пример использования двух спобов обращения к переменным родительского класса.

<?php ##Обращение к переменным родительского класса. Два способа
// Родительский класс
class Item {
 // Для первого способа необходим уровень конфиденциальности - protected
 protected $name;
 private $code;
 // Консруктор родительского класса
 function __construct( $name = "Item", $code = 0 ) {
  $this->name = $name;
  $this->code = $code;
 }
 // Для второго способа создаем метод
 function getName() {
  return $this->name;
 }
 // Также создаем метод для второго метода
 function getCode() {
  return $this->code;
 }
}
// Дочерний класс
class PriceItem extends Item {
 private $temp;
 // Конструктор родительского класса
 function __construct( $name, $code, $temp = "temp" ) {
  // Обязательное объявление родительского конструктора
  parent::__construct( $name, $code );
  // Обращаемся к переменным родительского класса вторым способом - parent:getName() и getCode()
  $this->temp = "temp = ".$temp." name = ".parent::getName()." code = ".parent::getCode();
 }
 // Для вывода результата обращения к переменным родительского класса первым способом
 function getParentName() {
  return $this->name;
 }
 // Для вывода результата обращения к переменным родительского класса вторым способом
 function getIt() {
  return $this->temp;
 }
}
// Инстанцируем объект
$Item = new PriceItem(Name, 1616);
// Выводим результаты
print $Item->getIt();
print "<br />";
print $Item->getParentName();
?>