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 :: Помогите разобраться с private и __constructor [2]
Покинул форум
Сообщений всего: 128
Дата рег-ции: Апр. 2010
Помог: 1 раз(а)
EuGen пишет:
Ради проверки задайте в классе-родителе другие значения и убедитесь, что от этого ничего не изменится.
Опять запутали...)
На самом деле я пробовал это делать... и действительно это не влияет на наследник..
Но как же это долбанный наследник подключается к баз данных, у которой есть пороль??!!
Ведь они нифига этот пароль не знает
Короче нафиг локалку,
пойду тестить на реальном хостинге заказчика ))))
----- Если все время идти вперед, до цели будет немного ближе..
EuGen
Отправлено: 25 Августа, 2011 - 14:27:31
Профессионал
Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007 Откуда: Berlin
Помог: 707 раз(а)
Конструктор пишет:
Но как же это долбанный наследник подключается к баз данных
Да Вы задаете значения в конструкторе класса. Уже трижды об этом написано. Вызывая parent::__construct() Вы и присваиваете значения. Только значения эти относятся к потомку и никак не связаны со значениями предка.
----- Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
iflight
Отправлено: 25 Августа, 2011 - 14:32:08
Гость
Покинул форум
Сообщений всего: 119
Дата рег-ции: Март 2011 Откуда: Россия, Сыктывкар
Помог: 2 раз(а)
Вот что происходит:
1) Создаем объект класса db2
2) Запускается конструктор этого класса
3) конструктор db2 вызывает конструктор родительского класса
4) В конструкторе db1 переменным с логином и паролем присваиваются данные.
5) Так как класс db2 не знает таких переменных, которые описаны в конструкторе db1, то он создает новые переменные с таким же именами для класса db2 (т.к. указанно $this) и присваивает им соответствующие значения
6) дальше во всех методах класса используются созданные конструктором переменные
Конструктор
Отправлено: 25 Августа, 2011 - 14:33:10
Частый гость
Покинул форум
Сообщений всего: 128
Дата рег-ции: Апр. 2010
Помог: 1 раз(а)
EuGen пишет:
никак не связаны со значениями предка.
тоесть подразумевается что как бы предка и нет,
и все происходит якобы в едином конструкторе наследника?
Тоесть
----- Если все время идти вперед, до цели будет немного ближе..
EuGen
Отправлено: 25 Августа, 2011 - 14:37:39
Профессионал
Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007 Откуда: Berlin
Помог: 707 раз(а)
Не как include, конечно, но в данном примере контекст - это объект-потомок. И все операции применятся к нему.
----- Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
Конструктор
Отправлено: 25 Августа, 2011 - 14:42:45
Частый гость
Покинул форум
Сообщений всего: 128
Дата рег-ции: Апр. 2010
Помог: 1 раз(а)
Всем спасибо, многое прояснили..
но одна проблема все же осталась..
и она мена сильно сбивала с толку..
1. Класс родитель работает только с правильными данными mysql_connect( $this->servername , $this->username , $this->password );
2. А класс наследник работает с любыми!!
проблема наверное частично и с настройками сервера базы данных..
----- Если все время идти вперед, до цели будет немного ближе..
EuGen
Отправлено: 25 Августа, 2011 - 14:45:33
Профессионал
Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007 Откуда: Berlin
Помог: 707 раз(а)
Конструктор пишет:
А класс наследник работает с любыми!!
Поясните, что Вы имеете ввиду
----- Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
Конструктор
Отправлено: 25 Августа, 2011 - 14:53:48
Частый гость
Покинул форум
Сообщений всего: 128
Дата рег-ции: Апр. 2010
Помог: 1 раз(а)
EuGen пишет:
Поясните, что Вы имеете ввиду
1. В классе родителе db1 (файл basa1.php) я ставлю пароль отбалды.. например $this->password = 'sdfs131231'
2. В классе наследнике db2 (файл basa2.php) я ниже пишу
Warning:mysql_connect()[function.mysql-connect]: Access denied for user 'root'@'localhost'(using password: YES) in C:\xampp\htdocs\test.loc\www\basa1.php on line 21
Could not connect: Access denied for user 'root'@'localhost'(using password: YES)
----- Если все время идти вперед, до цели будет немного ближе..
EuGen
Отправлено: 25 Августа, 2011 - 15:13:36
Профессионал
Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007 Откуда: Berlin
Помог: 707 раз(а)
Значит, Вы по-прежнему ничего не поняли.
Ваш класс-наследник работает не с любыми данными, а с теми, которые указаны в __construct. Поскольку Вы используете конструктор родительского класса, то свойства дочернего берутся при вызове этого констуктора. Но свойства родительского не влияют на дочерний, так как не видны.
Если же использовать родительский класс, то свойства уже видны и вступают в силу. Оттого и ошибка.
То есть дочерний работает не с "любыми данными" а с теми, которые Вы указали в конструкторе. И как бы Вы не меняли определение родительских приватных свойств - это повлияет только на родительский, но не на дочерний класс.
P.S. вообще, весь Ваш пример - это показатель весьма неудачной организации классов и применения ООП вцелом.
----- Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
Конструктор
Отправлено: 25 Августа, 2011 - 15:16:54
Частый гость
Покинул форум
Сообщений всего: 128
Дата рег-ции: Апр. 2010
Помог: 1 раз(а)
EuGen пишет:
Ваш класс-наследник работает не с любыми данными, а с теми, которые указаны в __construct.
Ну как же не слюбыми? Я же в верхнем сообщении привел пример, что ввожу в __construct
любые данные, и наследник с ними работает..!
----- Если все время идти вперед, до цели будет немного ближе..
EuGen
Отправлено: 25 Августа, 2011 - 15:18:51
Профессионал
Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007 Откуда: Berlin
Помог: 707 раз(а)
Конструктор пишет:
В классе родителе db1 (файл basa1.php) я ставлю пароль отбалды.. например $this->password = 'sdfs131231'
Но оно - приватно. И оно не видно потомку. Потомок получит то значение свойства, которое установится в его конструкторе при вызове parent::__construct()
----- Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
Конструктор
Отправлено: 25 Августа, 2011 - 15:20:49
Частый гость
Покинул форум
Сообщений всего: 128
Дата рег-ции: Апр. 2010
Помог: 1 раз(а)
EuGen пишет:
Потомок получит то значение свойства, которое установится в его конструкторе при вызове parent::__construct()
тут тоже нет правильных свойств... их нет нигде в коде,
но он работает!
----- Если все время идти вперед, до цели будет немного ближе..
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.