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й класс если он использует свойства родителя?? Ведь у родителя все свойства Privat !!
private $servername;
private $username;
private $password;
----- Если все время идти вперед, до цели будет немного ближе..
EuGen
Отправлено: 25 Августа, 2011 - 13:52:33
Профессионал
Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007 Откуда: Berlin
Помог: 707 раз(а)
А оно и не изменяет родительские свойства. Они недоступны потомку.
Во время обращения к свойствам в первый раз создаются свойства у объекта класса db2, которые просто называются так же. Но общего со свойствами db1 они не имеют.
Сравните:
во втором случае. В первом же выведется "accessed"
----- Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
Мелкий
Отправлено: 25 Августа, 2011 - 13:55:52
Активный участник
Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009 Откуда: Россия, Санкт-Петербург
Помог: 618 раз(а)
Конструктор пишет:
каким образом работает 2й класс если он использует свойства родителя?? Ведь у родителя все свойства Privat !!
Создаёт свои собственные. У родителя - private, о них наследник не знает вообще и думает, что их и нету. Потому создаёт свои.
----- PostgreSQL DBA
Конструктор
Отправлено: 25 Августа, 2011 - 13:56:05
Частый гость
Покинул форум
Сообщений всего: 128
Дата рег-ции: Апр. 2010
Помог: 1 раз(а)
EuGen пишет:
..
Тоесть у меня проблема с базой данных? (тестирую на веб-сервере XAMP)
И она дает уделить таблицу из базы с нулевыми паролем и юзером?
Ведь как то класс-наследник всеже удаляет таблицы..
(ps. пишу проект для крупной банковской системы, поэтому безопасность очень актуальна )) )
----- Если все время идти вперед, до цели будет немного ближе..
EuGen
Отправлено: 25 Августа, 2011 - 14:00:35
Профессионал
Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007 Откуда: Berlin
Помог: 707 раз(а)
БД тут ни при чем.
Ваш класс-потомок создает свои свойства - они не имеют ничего общего со свойствами родительского класса (они попросту не видны потомку)
----- Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
Конструктор
Отправлено: 25 Августа, 2011 - 14:03:41
Частый гость
Покинул форум
Сообщений всего: 128
Дата рег-ции: Апр. 2010
Помог: 1 раз(а)
EuGen пишет:
БД тут ни при чем.
Ваш класс-потомок создает свои свойства - они не имеют ничего общего со свойствами родительского класса (они попросту не видны потомку)
Тогда как происходит подключение если наследник не знает данных подключения?
Покинул форум
Сообщений всего: 128
Дата рег-ции: Апр. 2010
Помог: 1 раз(а)
iflight пишет:
ы же в наследнике их и присваевете
Присваивание это когда есть переменная и есть значение которое ей присваивается.
А во втором классе что присваивается этим свойствам ? >>( $this->servername , $this->username , $this->password );
ведь в этом классе нет нужных значений..
Дело в том что я писал это подключение не зная что privat родителя не наследуестя
и хотел что все данны шли от родителя.. а теперь не пойму как все таки это подключение к базе данных происходит..
Может тут браузер виноват? кеш какой нибудь.. не знаю как это назвать..
----- Если все время идти вперед, до цели будет немного ближе..
iflight
Отправлено: 25 Августа, 2011 - 14:13:10
Гость
Покинул форум
Сообщений всего: 119
Дата рег-ции: Март 2011 Откуда: Россия, Сыктывкар
Помог: 2 раз(а)
Конструктор Выполняется конструктор, наследованный и в нем создаются новые переменные класса наследника
При создание объекта класса насследника выполняется вот этот код:
----- Если все время идти вперед, до цели будет немного ближе..
EuGen
Отправлено: 25 Августа, 2011 - 14:18:04
Профессионал
Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007 Откуда: Berlin
Помог: 707 раз(а)
Переменные создадутся, но они будут относиться к классу-наследнику и не будут иметь ничего общего с классом-предком.
То есть вызывая parent::__construct() Вы создадите свойства в контексте текущего объекта. Родительские Вы не затронете.
----- Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
Конструктор
Отправлено: 25 Августа, 2011 - 14:19:47
Частый гость
Покинул форум
Сообщений всего: 128
Дата рег-ции: Апр. 2010
Помог: 1 раз(а)
EuGen пишет:
Переменные создадутся, но они будут относиться к классу-наследнику и не будут иметь ничего общего с классом-предком.
То есть вызывая parent::__construct() Вы создадите свойства в контексте текущего объекта. Родительские Вы не затронете.
Если я правильно Всех понял то:
1. Создаются новые переменные подключения .
2. Эти новые переменные все таки получают значения приватных переменных родителя.
3. Но при этом ЭТИ ЗНАЧЕНИЯ СТАНОВЯТСЯ PUBLIC (((
Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007 Откуда: Berlin
Помог: 707 раз(а)
Конструктор пишет:
2. Эти новые переменные все таки получают значения приватных переменных родителя.
Нет. Свойства создаются - это верно, но они создаются в контексте текущего объекта и стало быть являются его свойствами. Ни о каком наследовании тут нет и речи.
Ради проверки задайте в классе-родителе другие значения и убедитесь, что от этого ничего не изменится.
----- Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
iflight
Отправлено: 25 Августа, 2011 - 14:23:59
Гость
Покинул форум
Сообщений всего: 119
Дата рег-ции: Март 2011 Откуда: Россия, Сыктывкар
Помог: 2 раз(а)
EuGen так изменится же, он же наследует весь конструктор, в котором присвоение, а в контексте нового класса создание переменных и присвоение значений?
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.