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

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Вызов метода из parent класса [2]

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Без описания
OrmaJever Модератор
Отправлено: 27 Марта, 2012 - 00:40:02
Post Id



Активный участник


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


Помог: 299 раз(а)




laggerok пишет:
А Вы сами попробуйте:

Попробовал, работает. И кстате пример с protected тоже работает.


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
laggerok
Отправлено: 27 Марта, 2012 - 00:40:39
Post Id


Новичок


Покинул форум
Сообщений всего: 46
Дата рег-ции: Март 2012  


Помог: 0 раз(а)




Может это связано с настройками denwera? на чем вы пробовали?
 
 Top
OrmaJever Модератор
Отправлено: 27 Марта, 2012 - 00:45:20
Post Id



Активный участник


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


Помог: 299 раз(а)




аа я всё время не дочитываю.
Я имел ввиду работает вот этот пример с protected
PHP:
скопировать код в буфер обмена
  1. class Page {
  2.         static protected function makeMe() {}
  3. }
  4.  
  5. class Register extends Page {
  6.        public function __construct () {
  7.                 parent::makeMe();
  8.         }
  9. }
  10.  
  11. $O = new Register();

А тот который Вы написали работать не будет т.к. protected можно вызывать только из самого класа и из наследников, там только public
PHP:
скопировать код в буфер обмена
  1. class Page {
  2.      public funcion makeMe() { echo "LoL"; }
  3. }
  4.  
  5. $o = new Page();
  6. $o->makeMe();


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
laggerok
Отправлено: 27 Марта, 2012 - 00:49:10
Post Id


Новичок


Покинул форум
Сообщений всего: 46
Дата рег-ции: Март 2012  


Помог: 0 раз(а)




С __constract так и не работает почему-то. Потом разбираться буду.
А по поводу Protected скажу, что у меня просто отсохли мозги.

P.S. А, всё понял...нельзя кодить день и ночь вподряд. Радость Спасибо.

(Отредактировано автором: 27 Марта, 2012 - 00:50:32)

 
 Top
Okula
Отправлено: 27 Марта, 2012 - 00:56:01
Post Id



Участник


Покинул форум
Сообщений всего: 1389
Дата рег-ции: Окт. 2010  


Помог: 42 раз(а)




Потому что метод makeMe() имеет свойство protected. Думаю тебе стоит ещё раз прочитать главу в учебнике про приватные свойства класса.
Вне класса видны только методы свойства publuc, private используется только внутри класса и не наследуется дочерними, protected - используется только внутри класса и может быть унаследован дочерними классами.
(Добавление)
Вот этот пример будет работать корректно:
PHP:
скопировать код в буфер обмена
  1. class Page {
  2.     static protected function makeMe() {
  3.         echo 'Lol';
  4.     }
  5. }
  6.  
  7.  
  8. class Register extends Page {
  9.  
  10.    public function __construct () {
  11.             parent::makeMe();
  12.    }
  13.  
  14. }
  15.  
  16. // выведет на экран надпись "Lol"
  17. $O = new Register();

Но так писать нельзя.
Как я уже говорил - конструктор не должен возращать никакого результата и не должен выводить ничего на экран.
(Добавление)
Так же будет работать, если убрать свойство static из метода makeMe()
PHP:
скопировать код в буфер обмена
  1. protected function makeMe() {
  2.     echo 'Lol';
  3. }
 
 Top
DeertOff
Отправлено: 27 Марта, 2012 - 09:12:50
Post Id



Гость


Покинул форум
Сообщений всего: 126
Дата рег-ции: Июль 2011  


Помог: 3 раз(а)




для вызова статического метода класса в методе дочернего используеться self
в самом коде необязательно создавать экземпляр(объект) данного класса достаточно
написать ИмяКласса::СтатическийМетод!

Пример:
(на PHP давно не писал исправляйте если что)
PHP:
скопировать код в буфер обмена
  1.  
  2. // Родительский класс
  3. class ParentClass
  4. {  
  5.     public function __constuct()
  6.     {
  7.         // Конструктор родительского Класса
  8.     }
  9.    
  10.     static public function ConstMethod()
  11.     {
  12.         // Статический метод! Для
  13.         // его использования необезательно
  14.         // создовать Обьект этого Класса
  15.         // в коде ParentClass::ConstMethod();
  16.     }
  17.    
  18.     public function PublicMethod()
  19.     {
  20.         // Публичный Метод класса
  21.         // Доступен в коде
  22.     }
  23.    
  24.     protected function ProtectedMethod()
  25.     {
  26.         // Защищённый Метод класса
  27.         // Доступен только из
  28.         // Наследуемых классов!
  29.     }
  30.    
  31.     private function PrivateMethod()
  32.     {
  33.         // Приватный Метод класса
  34.         // Доступ к методу
  35.         // только из Класса в
  36.         // в котором он определён
  37.         // тоесть только из ParentClass!
  38.     }
  39. }
  40.  
  41. // Дочерний класс
  42. class ChildClass extends ParentClass
  43. {
  44.     public function __constuct()
  45.     {
  46.         // Конструктор родительского Класса
  47.         // Переопределение Родительского!
  48.         // Родительский вызываться небудет
  49.         // Чтобы его вызвать можно использовать
  50.         // parent::__constuct();
  51.  
  52.         // В коде программы:
  53.         // $obj = new ChildClass();
  54.     }
  55.    
  56.     static public function ConstMethod()
  57.     {
  58.         // Переопределение родительского!
  59.         // Чтобы вызвать статичиский метод
  60.         // Класса родителя:
  61.         // self::ConstMethod();
  62.         // Статический метод! Для
  63.         // его использования необезательно
  64.         // создовать Обьект этого Класса
  65.         // в коде ChildClass::ConstMethod();
  66.     }
  67.    
  68.     public function PublicMethod()
  69.     {
  70.         // Публичный Метод класса
  71.         // Переопределение! Родительский
  72.         // метод вызываться небудет!
  73.         // Чтобы его вызвать:
  74.         // parent::PublicMethod();
  75.     }
  76.    
  77.     protected function ProtectedMethod()
  78.     {
  79.         // Метод дочернего класса
  80.         // Переопределение Родительского!
  81.         // Родительский вызываться небудет!
  82.         // Чтобы его вызвать можно использовать
  83.         // parent::Method();
  84.        
  85.         // В коде программы его вызвать нельзя!
  86.         // $obj = new ChildClass();
  87.         // $obj->ProtectedMethod(); !Ошибка!
  88.         // Но можно вызвать из Дочернего!
  89.     }
  90.    
  91.     private function PrivateMethod()
  92.     {
  93.         // Приватный Метод класса
  94.         // Доступ к методу
  95.         // только из Класса в
  96.         // в котором он определён
  97.         // тоесть только из ChildClass!
  98.         // Родительский метод PrivateMethod
  99.         // вызвать нельзя!
  100.     }
  101. }
  102.  

(Отредактировано автором: 27 Марта, 2012 - 09:16:27)

 
 Top
Страниц (2): « 1 [2]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Объектно-ориентированное программирование »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB