Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: destuct родителя. да и construct тоже
Форумы портала PHP.SU » » Объектно-ориентированное программирование » destuct родителя. да и construct тоже

Страниц (1): [1]
 

1. Быколай - 08 Октября, 2011 - 20:04:22 - перейти к сообщению
здесь http://php.su/learnphp/phpoo/?php5 написано:
Цитата:
Конструкторы в классах-родителях не вызываются автоматически. Чтобы вызвать конструктор, объявленный в родительском классе, следует обратиться к методу parent::__construct().

и
Цитата:
Как и в случае с конструкторами, деструкторы, объявленные в родительском классе, не будут вызваны автоматически. Для вызова деструктора, объявленном в классе-родителе, следует обратиться к методу parent::__destruct().

на практике получаю вызов и того и другого, когда создаю наследника, в котором эти методы не переопределены.
то есть код:
PHP:
скопировать код в буфер обмена
  1.  
  2. <pre>
  3. <?PHP
  4. $main = new Main();
  5. $second = new Second();
  6.  
  7. class Main{
  8.         function __construct(){
  9.                 print __METHOD__."\n";
  10.         }
  11.        
  12.         function __destruct(){
  13.                 print __METHOD__."\n";
  14.         }
  15.        
  16. }
  17.  
  18. class Second extends Main{
  19.        
  20. }
  21.  

даёт:
CODE (html):
скопировать код в буфер обмена
  1.  
  2. Main::__construct
  3. Main::__construct
  4. Main::__destruct
  5. Main::__destruct
  6.  

где ошибка? в статье или моём понимании?
2. Champion - 08 Октября, 2011 - 20:26:15 - перейти к сообщению
Если не переопределны, то вызываются. Но если в дочернем классе написать конструктор (деструктор), то сработает только дочерний. А чтоб дочерний продолжал начатое родительским, - его надо вызвать явно.
(Добавление)
В С++, например, конструкторы срабатывают сами в порядке наследования, и диструкторы - в обратном порядке. А в PHP - не так. Поэтому в статье на это обращается внимание
3. Быколай - 08 Октября, 2011 - 20:35:32 - перейти к сообщению
Спасибо Champion!
Просто си не владею, а формулировка в статье наводит на мысль что именно не будет вызова родительских методов автоматом. В случае переопределения конечно и так понятно.

 

Powered by ExBB FM 1.0 RC1