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 :: Проблема в наследование.

 PHP.SU

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


 Страниц (4): [1] 2 3 4 »   

> Без описания
Проклятый принц
Отправлено: 13 Июня, 2013 - 12:30:37
Post Id


Гость


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


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

[+]


PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3. class Подключение {
  4.         protected $Подключение_к_базе_данных;
  5.         protected static $Инициация_подключения = null;
  6.        
  7.         private function __construct() {
  8.                 $this->Подключение_к_базе_данных = new mysqli("localhost", "root", "", "db");
  9.                 $this->Подключение_к_базе_данных->query("SET NAMES 'cp1251'");
  10.  
  11.         }
  12.        
  13.         public static function Инициация_подключения() {
  14.                 if(self::$Инициация_подключения === null) self::$Инициация_подключения = new Подключение();
  15.                         return self::$Инициация_подключения;
  16.                
  17.         }
  18.        
  19.         public function __destruct() {
  20.         if ($this->Подключение_к_базе_данных) $this->Подключение_к_базе_данных->close();
  21.         }
  22. }
  23.  
  24.  
  25.  
  26. class Регистрация extends Подключение{
  27.                 private function __construct() {
  28.                         parent::__construct();
  29.                 }
  30.                 public static function Инициация_подключения() {
  31.                         parent::Инициация_подключения();
  32.                 }
  33.                
  34.                         public function Регистрация() {
  35.                                 $this->Подключение_к_базе_данных->query("INSERT INTO  `db`.`polz` (`login` ,`password`)VALUES ('name',  'pass')");
  36.                         }
  37.                
  38.                 public function __destruct() {
  39.                         parent::__destruct();
  40.                 }
  41. }
  42.  
  43.  
  44. $Соединение = Регистрация::Инициация_подключения();
  45. $Соединение->Регистрация();
  46.  
  47.  
  48. ?>
  49.  


Пишет мол, где "$Соединение->Регистрация(); ", там ошибка.
В классе "Подключение" всё нормально, если туда вставить функцию "Регистрация()", и вызвать "Инициация_подключения()", а потом "Регистрация()", то он не ругает, и нормально добавляет в MySQL данные.
Где моя ошибка, подскажите?
Я пытаюсь у класса "Регистрация", вызвать функцию "Регистрация()", конструктор который унаследован у класса "Подключение ".

(Отредактировано автором: 13 Июня, 2013 - 14:14:54)

 
 Top
likvidator
Отправлено: 13 Июня, 2013 - 12:35:39
Post Id


Посетитель


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


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

[+]


оберните код в теги,пожалуйста
 
 Top
ПТО
Отправлено: 13 Июня, 2013 - 12:40:52
Post Id



Посетитель


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


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




protected и private убери
ТС, объясни, пожалуйста, зачем ты ограничиваешь области видимости у методов класса? Кто сможет на них "посягнуть"?

(Отредактировано автором: 13 Июня, 2013 - 13:29:20)

 
 Top
DeepVarvar Супермодератор
Отправлено: 13 Июня, 2013 - 13:15:06
Post Id



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


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


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




ПТО пишет:
зачем ты ограничиваешь области видимости у методов класса? Кто сможет на них "посигнуть"?
Например я. Вопросы?
(Добавление)
Проклятый принц, повторю за людьми - оберни код в бб-теги.
И что это за "русиш-вариабле-нейминг"?
Так никто не делает. Слышишь? Никто!
 
 Top
ПТО
Отправлено: 13 Июня, 2013 - 13:21:09
Post Id



Посетитель


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


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





Как, ДипВарвар, вы можете посягнуть на метод другого класса?
Например, вы проходите по урл://сайт/класс1/метод1
И создается объект1, выполняется его метод1.
Вопрос: Как юзер может выполнить метод2 объекта2 ??? Хорошо
 
 Top
Zuldek
Отправлено: 13 Июня, 2013 - 13:24:31
Post Id


Постоянный участник


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


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




кто вам сказал что типы доступа применяются для запрета доступа из url ?)
 
 Top
ПТО
Отправлено: 13 Июня, 2013 - 13:28:42
Post Id



Посетитель


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


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




Zuldek пишет:
кто вам сказал что типы доступа применяются для запрета доступа из url ?)


А для чего тогда? Я не пользовался ими никогда - будь другом, расскажи для чего
 
 Top
caballero
Отправлено: 13 Июня, 2013 - 13:31:32
Post Id


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


Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011  
Откуда: Харьков


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




а какой смысл наследоватся от класса конекта к БД? Чтобы понты кидать что у тебя в коде есть ООП?


-----
Бесплатная система складского учета с открытым кодом https://zippy[dot]com[dot]ua/zstore
 
 Top
ПТО
Отправлено: 13 Июня, 2013 - 13:33:03
Post Id



Посетитель


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


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




caballero пишет:
а какой смысл наследоватся от класса конекта к БД? Чтобы понты кидать что у тебя в коде есть ООП?

У меня также сделано - это чтобы в каждой модели не писать подключение к БД
 
 Top
EuGen Администратор
Отправлено: 13 Июня, 2013 - 13:33:52
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


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




ПТО
Почитайте про инкапсуляцию (и, частично, полиморфизм) - поймёте, для чего главным (но не единственным) образом это применяется.

Автору темы - почитайте про модификаторы переменных и методов (public, private, protected)


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
caballero
Отправлено: 13 Июня, 2013 - 13:35:59
Post Id


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


Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011  
Откуда: Харьков


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




Цитата:
У меня также сделано

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


-----
Бесплатная система складского учета с открытым кодом https://zippy[dot]com[dot]ua/zstore
 
 Top
vanicon
Отправлено: 13 Июня, 2013 - 13:40:29
Post Id



Частый посетитель


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


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




Наверно это уже тысячу раз обсуждалось, что для подключения к бд есть singleton его и нужна юзать.
А что бы в каждой модели явно этого не делать, то они должны быть наcледованы от одной общей модели типа ModelDb, а та в свою очередь будет напрямую юзать singlton...

(Отредактировано автором: 13 Июня, 2013 - 13:41:41)



-----
Так было, так есть и так будет
 
 Top
esterio
Отправлено: 13 Июня, 2013 - 14:01:11
Post Id



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


Покинул форум
Сообщений всего: 5025
Дата рег-ции: Нояб. 2012  
Откуда: Украина, Львов


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




ПТО
Модификаторы доступа как раз для ограничения доступа снаружи к елементам обьекта(будь-то свойства или методы).
vanicon
Зачем наследовать от modelDb, или все думают что модель обьязательно должна что-то делать з базой. Если же мне нужно сделать что-т з базой, то зачем бы не сделать так
PHP:
скопировать код в буфер обмена
  1. db::getInstance()->query($query);

И не плодить куча ссилок на обьект.
И еще есть замечательный паттерн Registry
Проклятый принц
public - публичное свойство/метод
protected - приватное(защищенное) свойство/метод
private - приватное свойство/метод (разница в том, что оно не наследуется)
 
 Top
Проклятый принц
Отправлено: 13 Июня, 2013 - 14:14:13
Post Id


Гость


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


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

[+]


Везде public поставил. Всё равно ругается.
Fatal error: Call to a member function Регистрация() on a non-object
 
 Top
vanicon
Отправлено: 13 Июня, 2013 - 14:33:49
Post Id



Частый посетитель


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


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




esterio
Да. Я считаю что modelDb должна уметь работать с бд, насколько я помню вы знакомы с yii так там этот класс называется ActiveRecord..
esterio пишет:
И не плодить куча ссилок на обьект.

esterio пишет:
И еще есть замечательный паттерн Registry

Вам не находите здесь противопоставления? (исходя из того как Registry - объект содержащий ссылки на другие объекты)
И кстати этот паттерн мне так и не пригодился, я лучше сделаю статичное свойство в классе типа Framework если уж понадобиться... хотя пока не понадобилось.


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


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



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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB