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 :: Как получить переменную из родительского класса?
Покинул форум
Сообщений всего: 291
Дата рег-ции: Авг. 2010
Помог: 0 раз(а)
Как в дочернем классе получить переменную из родительского класса, если дочерний класс создается в конструкторе родительского класса?
Вот простой пример, в котором на мой взгляд должна выводиться переменная $test, а на самом деле не выводится.
Как вариант можно конечно передать переменную при создании дочернего класса
$this->obj = new MyChild($this->test);
Но если еременных и дочерних классов много, то замучаешься передавать, да и смысл в extends теряется.
Покинул форум
Сообщений всего: 291
Дата рег-ции: Авг. 2010
Помог: 0 раз(а)
caballero пишет:
а что делать дочернему классу в конструкторе родительского?
может хоть почитаешь основы ООП прежде чем городить такую лабуду
Если мне не нужно было создавать дочерний класс в конструкторе родительского, я бы этого не делал, но это нужно для моей задачи. Не хочешь не помогай.
DelphinPRO, не подходит такая запись.
Пока просто передал данные в виде массива в дочерний класс.
OrmaJever
Отправлено: 01 Апреля, 2012 - 18:28:24
Активный участник
Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010 Откуда: Чернигов
Помог: 299 раз(а)
Rooner У вас не правельная структура класов значит. Родительский класс должен быть класом не зависящим от других, а дочерние уже расширять этот функционал.
----- Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
Bio man
Отправлено: 01 Апреля, 2012 - 21:17:36
Постоянный участник
Покинул форум
Сообщений всего: 2751
Дата рег-ции: Июль 2010 Откуда: Даугавпилс, Латвия
Помог: 52 раз(а)
Rooner пишет:
это нужно для моей задачи
А кто тебе задачу дал? Сам придумал? Препод? Друг? (Добавление)
Во первых в конструкторе MyChild нужно вызвать конструктор родителя. Но если это сделать то будет зацикливание. (Добавление)
либо сделать свойство с текстом статическим.
Так вот, из класса index я могу получить $db_connect в которой содержится "подключение" БЕЗ вызова конструктора родителя. И все прекрасно работает.
Но в классе Search, если не запрашивать конструктор родителя, $db_connect взять из родителя не получается.
Почему так?
в одном классе можно, в другом нет.
MiksIr
Отправлено: 18 Октября, 2014 - 15:02:27
Забанен
Покинул форум
Сообщений всего: 378
Дата рег-ции: Сент. 2014
Помог: 10 раз(а)
[+]
Цитата:
БЕЗ вызова конструктора родителя.
Потому что с вызовом. Дочерние классы наследуют все родительские методы, если те не private.
Во втором случае вы переопределили конструктор - а значит выполняется он, а не родительский.
----- self-banned
p33t
Отправлено: 19 Октября, 2014 - 20:24:19
Новичок
Покинул форум
Сообщений всего: 40
Дата рег-ции: Окт. 2014
Помог: 0 раз(а)
MiksIr прежде всего Спасибо вам за ответ.
На сколько я понял, если в дочернем классе вообще не будет конструктора, тогда при создании объекта дочернего класса, будет запущен конструктор родителя.
Верно ?
Наверно это и произошло в моем классе Index.
Но я пробовал так же убрать конструктор из класса search. При обращении в свойству содержащем подключение ($db_connect), мне возвращало null.
MiksIr
Отправлено: 19 Октября, 2014 - 22:35:05
Забанен
Покинул форум
Сообщений всего: 378
Дата рег-ции: Сент. 2014
Помог: 10 раз(а)
[+]
p33t пишет:
На сколько я понял, если в дочернем классе вообще не будет конструктора, тогда при создании объекта дочернего класса, будет запущен конструктор родителя.
Верно ?
Да, все точно также, как если бы вызывали метод __construct из объекта сами.
p33t пишет:
Но я пробовал так же убрать конструктор из класса search. При обращении в свойству содержащем подключение ($db_connect), мне возвращало null.
Если бы все правильно убрали, то проблем быть не должно. Единственное, что в голову приходит - это что в классе search есть метод search. Наследие пхп4 - метод с именем таким же как класс - работает как конструктор. (Добавление)
ЗЫ: и конструктор делайте public
----- self-banned
p33t
Отправлено: 20 Октября, 2014 - 20:55:19
Новичок
Покинул форум
Сообщений всего: 40
Дата рег-ции: Окт. 2014
Помог: 0 раз(а)
Да, спасибо.
Так и сделал, да и еще много чего поменял.
Если можно, вопрос не по теме...
Вот небольшой кодик:
Учерен вам будет понятно что он делает.
вот только не могу понять чего он не работает
То есть обходит мимо конструкцию if игнорируя ее вообще и выдает все что есть в массиве даже пустые поля.
Покинул форум
Сообщений всего: 378
Дата рег-ции: Сент. 2014
Помог: 10 раз(а)
[+]
Код работает правильно. Ищите ошибку в другом месте.
----- self-banned
p33t
Отправлено: 20 Октября, 2014 - 21:50:40
Новичок
Покинул форум
Сообщений всего: 40
Дата рег-ции: Окт. 2014
Помог: 0 раз(а)
С вопросом что выше я разобрался (Добавление)
Спасибо за помощ (Добавление)
Дело было в массиве который передавал значение "пробел пробел"
А и не задумываясь что такое может быть вставлял только 1 пробел.
На таких глупостях стопорится дело дольше всего
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.