Объясните человеческим языком зачем нужен конструктор

Статус
В этой теме нельзя размещать новые ответы.
То есть, если есть, например, класс Человек, а его подвиды (расы) - экземпляры, то в конструкторе можно прописать, что Человек имеет мозг, руки, ноги и так далее. При создании даже пустого экземпляра, к примеру, Китаец в нём автоматически будут руки, ноги, мозг и прочее? Так что ли?
 
Solomon Kane есть конструктор лего с помощью которого можно соорудить робота "мозги" которого программируются...


То есть, если есть, например, класс Человек, а его подвиды (расы) - экземпляры, то в конструкторе можно прописать, что Человек имеет мозг, руки, ноги и так далее. При создании даже пустого экземпляра, к примеру, Китаец в нём автоматически будут руки, ноги, мозг и прочее? Так что ли?

......

PHP:
 class Human{
        
        public $hand;
        public $leg;
        public $eye;
        
      public function __construct() {          
          $this->hand = 2; // человек имеет две руки 
          $this->leg = 2; // человек имеет две ноги          
      }
  }
       
    /* при создании "китайца"  автоматом  будет вызван конструктор  который и 
    *  инициализирует китайца двумя руками и ногами ....
    * 
    * у человека также есть глаз но его значение не определено, 
    * так как в конструкторе оно не  инициализируется
    * 
    */
 $chinese  = new Human();
     
 echo   'head: '.$chinese->hand . '<br />' .
        'leg: '.$chinese->leg . '<br />' .
        'eye: '.$chinese->eye . '<br />';

как-то так ... если конечно здесь не имелось введу наследование
 
То есть, если есть, например, класс Человек, а его подвиды (расы) - экземпляры, то в конструкторе можно прописать, что Человек имеет мозг, руки, ноги и так далее. При создании даже пустого экземпляра, к примеру, Китаец в нём автоматически будут руки, ноги, мозг и прочее? Так что ли?
Допустим есть класс "человек". Создаем 2 экземпляра, одного китайца, а второго русского.
PHP:
class man{
public $lang;  //язык
public $color;  //цвет
public $religion; //религия
function __constructor($nation) 
   //вытащить из БД описание национальных признаков

   $info=какаято_функция_вытягивающая информацию_о_национальных _чертах(nation);

   $this->lang=$info['lang']; 
   $this->color=$info['color'];
   $this->religion=$info['religion'] ;
 
}
//Теперь создаем 2-х человек. Конструктору скармливаем 
//национальность, а он автоматически заполняет особенности (цвет кожи. язык, религию).
man1= new man("Chinese");
man2= new man("Russian");
//теперь когда нам понадобится инaормация о человеке 1-м человеке,например его язык, мы просто используем

echo $man1->lang;
на выходе получим слово "russian". Как видишь контсруктор сам инициализировал все свойства, взависимости от входного параметра. Если бы в приведенном примере не было конструктора, то нам пришлось бы все равно после каждого создания экземпляра человека заполнять его национальность, религию, цвет кожи, поскольку человек был бы не полноценным. Ту задачу, которую необходимо выполнять с объектом всегда и распологают в конструкторе.
Раз уж ззашел разговор о конструкторе, есть еще антогонист ему -деструктор
PHP:
function __destructor(){
 //код
}
Деструктор вызывается тоже всегда. но при уничтожении объекта. Даже если объект не уничтожается явно, деструктор гарантированно вызывается по завершении работы сценария. Цель его - почистить за экземпляром чегото, м.б сохранить какуюто информацию. Пример с нашими человечками:
предположим что в процессе жизни (в процессе работы сценария) наш человечек man1 принял ислам man1->religion="Islam", поскольку православных начали щемить. Дальше из-за глобального потепления русский стал похож на негра: man1->color="brown"; Эту информацию о нем нужно сохранить. Тогда в деструктор просто добавляется функция сохранения этой информации (например в БД);
Можно деструктор было и не привлекать, но тут как в случае с конструктором пришлось бы каждый раз вызывать функцию "сохранить параметры". Т.е. в эти выбрасывается тот код, который всегда должен выполниться с объектом.
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху