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 :: MySQLi при ООП [3]

 PHP.SU

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


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

> Без описания
teddy
Отправлено: 12 Июня, 2013 - 20:17:12
Post Id


Участник


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


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




LIME
Strict Standards: Non-static method Cars::AddCar() should not be called statically in Z:\home\test1.ru\www\newclass.php on line 27

Вот что вышло, но никак не T_PAAMAYIM_NEKUDOTAYIM...

Странно, что в БД все добавляется успешно...


Если не ошибаюсь, при T_PAAMAYIM_NEKUDOTAYIM - вообще все ломается, хоть если error_reporting(0)...
 
 Top
DeepVarvar Супермодератор
Отправлено: 12 Июня, 2013 - 21:40:17
Post Id



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


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


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




teddy пишет:
Strict Standards: Non-static method Cars::AddCar()
Оно говорит что у тебя написано:
public function AddCart()
а надо написать:
public static function AddCart()
 
 Top
DelphinPRO
Отправлено: 12 Июня, 2013 - 21:46:01
Post Id



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


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


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




DeepVarvar,
не, оно говорит, что надо вызывать

$object->method();
а не
Class::method();


-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
teddy
Отправлено: 12 Июня, 2013 - 22:27:57
Post Id


Участник


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


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




DeepVarvar пишет:
а надо написать:
public static function AddCart()

Да я уже давно исправил, спасибо )

По поводу синглтона хотел бы ещё раз определиться.. Вообщем прочитал всякого в интернете, мнений много, хотелось бы услышать дельный совет..

Дела обстоят так: Хочу написать большой проект(учебный), посвятить которому планирую не менее 2-3 месяца, будет много всяких фишек + админка. Читал что "неграмотное" использование шаблонов может привести в итоге к "замыканию" при переносе на хостинг или при расширении проекта. Вообщем встретил много всего интересного и чуть запутался... как говорится, сколько людей - столько и мнений..

Могут ли у меня возникнуть какие то подводные камни при использовании шаблона с которыми я скорее всего не сталкивался? Речь идет конкретно о синглтоне только для подключения к БД... А то в последнее время немного шокирован "открытиями" с которыми ознакомился на днях... Как оказалось, ньюансов более чем достаточно. Дабы не проворонить весь свой труд, хотелось бы уточнить этот момент... Сори если вопросы глупые, скорее всего так оно и есть )) Но в целях корректного обучения все же осмеливаюсь их здесь задавать... Спасибо заранее

(Отредактировано автором: 12 Июня, 2013 - 22:35:17)

 
 Top
spsu
Отправлено: 12 Июня, 2013 - 22:34:25
Post Id



Частый гость


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


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




teddy, кст. про учебный проекты я бы писал на готовом фреймверке Kohana и.т.п
Т.к будет в итоге знания фрэймверка, которое довольно полезно будет, и можно будет смотреть что как реализовано... Я бы сделал именно так.
 
 Top
vanicon
Отправлено: 12 Июня, 2013 - 22:36:13
Post Id



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


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


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




teddy пишет:
Читал что "неграмотное" использование шаблонов может привести в итоге к "замыканию" при переносе на хостинг или при расширении проекта

При переносе на хостинг, с какого это перепугу?
teddy пишет:
Дабы не проворонить весь свой труд, хотелось бы уточнить этот момент...

Какой труд, написали же что проект учебный.
А вообще запомните, что старый проект всегда появляется желание переписать (сделать лучше), видел у кого то в подписи, да и по себе знаю.
Так что пишите код, а позже поймете что написали не так и перепишите, от этого не куда не деться, а на пальцах не объяснить, это практика.
И я думаю что все проходили через это.


-----
Так было, так есть и так будет
 
 Top
teddy
Отправлено: 12 Июня, 2013 - 22:38:49
Post Id


Участник


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


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




spsu
Фреймворки я пока не использую, думаю в дальнейшем тоже не буду, если работа по этой части не подвернется... делать "на готовенькое" - не думаю что самый лучший способ.. лучше на своих ошибках учиться и набирать опыт, таким образом в дальнейшем я уже буду чувствовать себя увереннее...
(Добавление)
vanicon пишет:
Какой труд, написали же что проект учебный.

Ну и что учебный? )

vanicon пишет:
Так что пишите код, а позже поймете что написали не так и перепишите, от этого не куда не деться, а на пальцах не объяснить, это практика.

Наверное вы правы... скорее всего моя самая большая ошибка заключается в том, что я хочу выучить все и сразу... Ну ничего с собой поделать не могу, руки чешуться ))
 
 Top
teddy
Отправлено: 13 Июня, 2013 - 15:11:28
Post Id


Участник


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


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




Знаю, что многие из вас готовы меня уже пристрелить, но все же отпишу здесь ещё разок ) Вообщем, думал, ходил-бродил по инету, "слепил" в итоге "код", который указан ниже. Все работает, вот только не пойму одного. Как использовать соединение с БД внутри функции/метода остальных классов напрямую?

PHP:
скопировать код в буфер обмена
  1. class DBconnect {      
  2.         static private $_instance = null;
  3.        
  4.         private function __construct () {}
  5.         private function __clone () {}
  6.        
  7.         static function getInstance () {
  8.        
  9.         if(self::$_instance == null){
  10.  
  11.         self::$_instance = new mysqli("localhost", "root", "", "users");
  12.  
  13.         return self::$_instance;
  14.                 }
  15.                
  16.        
  17.         }      
  18.                
  19. }
  20. $db = DBconnect::getInstance();
  21. $db->query("INSERT INTO users(login, password) VALUES('login', 'password')") or die($db->error);


На первый взгляд вроде все в шоколаде, но если я напишу что то вроде

PHP:
скопировать код в буфер обмена
  1. function blabla () {
  2. $db->query("INSERT INTO users(login, password) VALUES('login', 'password')") or die($db->error);
  3.  
  4. }


То нифига не отработает... Читал про глобальные переменные и понял, что использовать их не желательно..

Или тогда получается, что при использовании синглтона все sql запросы должны находиться "ЗА ПРЕДЕЛЕАМИ" классов или функций? А функции в свою очередь должны возвращать какой то результат, а уже потом в той области где доступен синглтон должен обрабатываться sql запрос на основе того, что вернет функция или метод из класса? Не удобно на мой взгляд...


Да, я жду ваших выстрелов Язычок
 
 Top
LIME
Отправлено: 13 Июня, 2013 - 15:15:26
Post Id


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


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


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




PHP:
скопировать код в буфер обмена
  1. function blabla () {
  2.     $db = DBconnect::getInstance();
  3.     $db->query("INSERT INTO users(login, password) VALUES('login', 'password')") or die($db->error);
  4.  }
$db не локальная переменная
 
 Top
teddy
Отправлено: 13 Июня, 2013 - 15:20:57
Post Id


Участник


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


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




LIME пишет:
$db = DBconnect::getInstance();

Ах вот оно в чем дело... получается если каждый раз внутри функции я создавал бы объект типа $db = new mysqli(); - то при каждом запросе плодился бы каждый раз объект, здесь по сути все тоже самое выходит, но только без "плода" нового объекта.. Я почему то начал путать с "сокращением" кол-ва строк кода..

Надеюсь на этот раз я окончательно все и достаточно хорошо понял )
(Добавление)
LIME пишет:
$db не локальная переменная

имел ввиду ключевое слово global )
(Добавление)
Если нет никаких замечаний по последнему варианту + добавление от LIME, то тему можно закрыть )

Спасибо что помогаете ребята, я вам очень благодарен! Улыбка
 
 Top
LIME
Отправлено: 13 Июня, 2013 - 15:44:51
Post Id


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


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


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




teddy пишет:
каждый раз внутри функции я создавал бы объект типа $db = new mysqli();
не смог бы
у тебя приватный конструктор
new это вызов конструктора
 
 Top
vanicon
Отправлено: 13 Июня, 2013 - 15:45:03
Post Id



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


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


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




teddy
Единственно что я бы подправил, так public static и private static а не static private.
Это незначительные мелочи, но это более правильно...


-----
Так было, так есть и так будет
 
 Top
teddy
Отправлено: 13 Июня, 2013 - 15:53:18
Post Id


Участник


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


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




LIME
В данном случае да, согласен. Но я имел ввиду предыдущий вариант, без использования шаблона, а тупо открывать и закрывать соединение в каждой функции или методе.. А с шаблоном то да, у меня же конструктор приватный, что запрещает создание новых объектов...

vanicon
Интересно, а в чем разница? )

Я думал сначала говорим, что все, что идет после ключевого слова static будет статическим, а не говорим что то, а потом "добавляем" что учти, это дело статическое... Может чего то недопонимаю..
 
 Top
vanicon
Отправлено: 13 Июня, 2013 - 15:57:40
Post Id



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


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


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




teddy
Это вовсе не обязательно, и работать будет одинаково.
Но это как если бы константы писались бы в нижним регистре, работать будет, но это не совсем корректно, вот и все.


-----
Так было, так есть и так будет
 
 Top
AlexAnder
Отправлено: 13 Июня, 2013 - 15:58:35
Post Id



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


Покинул форум
Сообщений всего: 915
Дата рег-ции: Авг. 2012  
Откуда: Россия


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




Цитата:
Я думал сначала говорим, что все, что идет после ключевого слова static будет статическим, а не говорим что то, а потом "добавляем" что учти, это дело статическое... Может чего то недопонимаю..



[quote="http://habrahabr[dot]ru/post/140637/ (D. Koterov)"]Аргумент простой — что имеет бОльшую вероятность быть измененным в будущем, должно поддаваться изменению легко. Public меняется на private или protected часто, а вот спецификатор static почти никогда не убирается. Править начало строки легче, чем ее середину, поэтому public — в начале.

Ну и плюс еще в c++, например, public — не модификатор, а начало секции. Поэтому остается привычка продолжать группировать по секциям.[/quote]
(Добавление)
что будет если $_instance не null? Ничего? Однако

PHP:
скопировать код в буфер обмена
  1. if(self::$_instance == null){
  2.  
  3.         self::$_instance = new mysqli("localhost", "root", "", "users");
  4.  
  5.         return self::$_instance;
  6.                 }
  7.                
  8.        
  9.         }

+ беда с отступами Нахмурился


-----
Оказывается, недостаточно читать справочники, чтобы правильно писать коды. sadex ©

Форумы стали местом обучения программированию, а не решения трудных вопросов. KingStar ©
 
 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