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 :: Наследование объектов базового класса в php5

 PHP.SU

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


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

> Без описания
puta
Отправлено: 17 Февраля, 2011 - 22:40:40
Post Id


Новичок


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


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




Здравствуйте!

Пытаюсь вникнуть в наследование и столкнулся со следующей проблемой.

есть базовый класс
CODE (php):
скопировать код в буфер обмена
  1.  
  2. <?php
  3. class Base {
  4. protected ttt = '123';
  5.  function get(){
  6.    include('new.class.php');
  7.    new child();
  8.  }
  9. }
  10. ?>
  11.  


и второй класс
CODE (php):
скопировать код в буфер обмена
  1.  
  2. <?php
  3. class child extends Base {
  4. function __construct(){
  5. echo $this->ttt;
  6. }
  7. }
  8. ?>
  9.  


Ничего не выводит. Я так понимаю что второй класс не может получить доступ к ttt но вот почему и можно ли как-то это реализовать?
 
 Top
Мелкий Супермодератор
Отправлено: 17 Февраля, 2011 - 22:46:30
Post Id



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


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


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




А вы пытаетесь вникнуть в наследование какого языка? Если таки php, то куда дели $ в имени переменной? php без $ не работает Подмигивание


-----
PostgreSQL DBA
 
 Top
OrmaJever Модератор
Отправлено: 17 Февраля, 2011 - 22:51:25
Post Id



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


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


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




Да и ещё бы интересно увидеть где создаётся обьект хоть какого нибудь класа Растерялся


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
puta
Отправлено: 17 Февраля, 2011 - 22:52:54
Post Id


Новичок


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


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




пардон - набирал код тут вручную т.к. классы оригиналы довольно объёмные.
ошибок в синтаксисе нет. интересует именно логика. могу ли я из конструктора обращаться к функциям и объектам базового класса?
(Добавление)
OrmaJever пишет:
Да и ещё бы интересно увидеть где создаётся обьект хоть какого нибудь класа Растерялся

если это столь важно для вас чтобы ответить на мой вопрос а не разводить здесь флуд то привожу более полный пример:

PHP:
скопировать код в буфер обмена
  1. <?PHP
  2.  
  3. class Base {
  4.  
  5. protected $ttt = '123';
  6.  
  7.  function get(){
  8.  
  9.    include('new.class.php');
  10.  
  11.    new child();
  12.  
  13.  }
  14. $q = new Base();
  15. $q->get();
  16. }
  17. ?>
 
 Top
OrmaJever Модератор
Отправлено: 17 Февраля, 2011 - 23:01:56
Post Id



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


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


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




parent::$ttt?
(Добавление)
А ну да и напишите protected static $ttt = '123';


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
puta
Отправлено: 17 Февраля, 2011 - 23:18:10
Post Id


Новичок


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


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




не работает. (
 
 Top
OrmaJever Модератор
Отправлено: 17 Февраля, 2011 - 23:23:19
Post Id



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


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


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




PHP:
скопировать код в буфер обмена
  1. class Base {
  2. protected static $ttt = '123';
  3.  function get(){
  4.    include('new.class.php');
  5.    new child();
  6.  }
  7. }
  8.  
  9.  
  10. class child extends Base {
  11. protected static $ttt = 111;
  12. function __construct(){
  13. echo parent::$ttt;
  14. echo self::$ttt;
  15. }
  16. }
  17. $ob = new child;


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
Мелкий Супермодератор
Отправлено: 17 Февраля, 2011 - 23:30:19
Post Id



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


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


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




puta пишет:
могу ли я из конструктора обращаться к функциям и объектам базового класса?

да, если они public или protected. К private - не сможете.

PHP:
скопировать код в буфер обмена
  1. class A {
  2.         protected $a = 'aa';
  3.         public function aa () {
  4.                 echo "функция класса A";
  5.                 }
  6.         }
  7.  
  8. class B extends A {
  9.         public function __construct() {
  10.                 var_dump($this->a);
  11.                 }
  12.         }
  13.  
  14. $b = new B;
  15. $b->aa();

пример исправен, смотрите, что есть у вас.


-----
PostgreSQL DBA
 
 Top
puta
Отправлено: 17 Февраля, 2011 - 23:38:22
Post Id


Новичок


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


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




кажется я понял почему у меня не работает, но проблему пока не решил )

в одной из функций базового класса я делаю нечто подобное:

PHP:
скопировать код в буфер обмена
  1. $this->ttt = 'qqq';
  2. include('new.class.php');
  3. new child();


соответственно var_dump($this->ttt) возвращает NULL
 
 Top
Okula
Отправлено: 18 Февраля, 2011 - 00:20:21
Post Id



Участник


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


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




Непонимаю зачем создавать объект для базового класа чтобы создать через него новый объект дочернего. Не проще ли сразу создать новый объект дочернего класса, ведь он унаследует все методы и свойства базового.
puta, лишяя морока только.
 
 Top
adept_php
Отправлено: 18 Февраля, 2011 - 08:17:19
Post Id


Новичок


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


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




Уважаемый, puta!

Ваш код:
puta пишет:
<?PHP
 
class Base {
 
protected $ttt = '123';
 
 function get(){
 
   include('new.class.php');
 
   new child();
 
 }
$q = new Base();
$q->get();
}
?>


Вообще не работает и не должен!

Код:
CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. $q = new Base();
  3. $q->get();
  4.  


Необходимо написать вне класса Base.
 
 Top
JustUserR
Отправлено: 18 Февраля, 2011 - 11:18:38
Post Id



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


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


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




puta пишет:
В одной из функций базового класса я делаю нечто подобное
Возможной причиной осуществления некорректного функционирования предполагаемого PHP-приложения является использование конструкций определения классов не соответствующих реальным требуемым позициям их элементного определения и зависимого уровня трактования относительно потока вычисления указанной конструкции - в частности в действительности определение класса в языке PHP является статическим и является однозначно ассоциированным с генерируемым именованным пространством имен


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Программирование на PHP »


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



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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB