Вопрос-Ответ по ООП PHP

1. Виталий (24.01.2011 / 18:57)
Пишем сдесь только вопросы и ответы по ООП PHP.
P.S Модеры, если посчитаете что хватает темы "Вопрос-Ответ по php" удалите ету тему smile

Добавлено через 02:22 сек.
ВОПРОС : допустим создаеться 2 обекта класов
$obj1 = new myClass();
$obj2 = new my2Class();
у каждого класа есть конструктор и деструктор.Деструктор какого обьэкта будет вызиваться последним?

2. Роман (24.01.2011 / 19:03)
Я вообще хз что такое ооп...автор. объясни пожалуйста

3. Виталий (24.01.2011 / 19:08)
2. Двома словами не скажеш так что гугл

4. Саня (24.01.2011 / 19:34)
3. Виталий Николаевич, зачем тогда было тему создавать если гугл и так может все сказать ?
ООП - объектно-ориентированное программирование
парадигма программирования, в которой основными концепциями являются понятия объектов и классов

Класс — это тип, описывающий устройство объектов. Понятие «класс» подразумевает некоторое поведение и способ представления. Понятие «объект» подразумевает нечто, что обладает определённым поведением и способом представления. Говорят, что объект — это экземпляр класса. Класс можно сравнить с чертежом, согласно которому создаются объекты. Обычно классы разрабатывают таким образом, чтобы их объекты соответствовали объектам предметной области.

Класс является описываемой на языке терминологии (пространства имён) исходного кода моделью ещё не существующей сущности, т. е. объекта.

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

Добавлено через 00:52 сек.
Ну это так двумя словами и википедии, гг. А больше я думаю действительно автор темы расскажет

5. Роман (24.01.2011 / 19:41)
4. Santez, ну а смысл всего этого? Зачем все эти классы и объекты?

6. Игорь (24.01.2011 / 19:43)
С ним удобнее) По мне так более легче "велосипеды" городить нежели чем при процедурном подходе)

7. Виталий (24.01.2011 / 19:45)
4. ха ха думаеш ето помогло чтото узнать об ооп? vtopku

8. Роман (24.01.2011 / 19:45)
6. rezent, извини за наивность, не мог бы ты привести пример на обычном коде и на ооп??

9. Саня (24.01.2011 / 19:47)
5. Nominal, ех зачем... а зачем люди на Луни летали?
1) ООП это удобно
2) Не знаю, мне кажется тут самому понять надо, для меня это как конструктор чтоли...

Добавлено через 01:01 сек.
class Ass {

public $act = 'No';

public function kaka(){

$this->act='Yeeeesss';

}
}

$gokaka = new Ass;
$gokaka->kaka();

D

10. Игорь (24.01.2011 / 19:50)
8. Nominal, Тут много тем насчет ООП) Поищи)
9. +1
+ код красивее становиться ИМХО))) D

11. Виталий (24.01.2011 / 19:52)
Nominal , прочти в книге об ООП поймеш)

12. Роман (24.01.2011 / 19:56)
вникнуть бы... насчет каки - весело. ну а серьезно... нихрена почти не понял...типа акт = Нет
Потом при вызове присваивается значение Да..так что ли?

13. Виталий (24.01.2011 / 20:06)
12.Пока не прочтите учебник особо не поймете )

14. Игорь (24.01.2011 / 20:49)
Тему закрепил!

15. Виталий (24.01.2011 / 21:13)
повторю пост...
ВОПРОС : допустим создаеться 2 обекта класов

$obj1 = new myClass(); 
$obj2 = new my2Class(); 

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

16. JustZero (24.01.2011 / 21:43)
15. Виталий Николаевич, я думаю что второго) Хотя сам не против узнать)

17. Виталий (24.01.2011 / 22:44)
15.я б тестанул на винда сечас или дышет ...на компе бардак...даже не хочю в денвер лезть)...я тож думаю что 2

18. ramzes (24.01.2011 / 23:19)
кулкодыры)))

19. Виталий (24.01.2011 / 23:26)
18.лучше б ответил vtopku smile

20. Саня (24.01.2011 / 23:38)
Так смотрите
class MyClass {
function __construct() {
echo "Запущен конструктор базового класса1";
}
function __destruct() {
echo "Запущен деструктор базового класса1";
}
}
class MyClass2 {
function __construct() {
echo "Запущен конструктор базового класса2";
}
function __destruct() {
echo "Запущен деструктор базового класса2";
}
}

получаем при
$obj = new MyClass();
$obj = new MyClass2();

Запущен конструктор базового класса 1
Запущен конструктор базового класса 2
Запущен деструктор базового класса 2
Запущен деструктор базового класса 1

Добавлено через 01:28 сек.
при

$obj = new MyClass();
unset($obj);
$obj2 = new MyClass2();
unset($obj2);

Выводит
Запущен конструктор базового класса 1
Запущен деструктор базового класса 1
Запущен конструктор базового класса 2
Запущен деструктор базового класса 2

Добавлено через 04:04 сек.
А если так
$obj = new MyClass();
$obj2 = new MyClass2();
unset($obj);
unset($obj2);

тогда получаем
Запущен конструктор базового класса 1
Запущен конструктор базового класса 2
Запущен деструктор базового класса 1
Запущен деструктор базового класса 2

21. Виталий (24.01.2011 / 23:48)
спасибо)

22. Валерий (25.01.2011 / 14:03)
Я как то даже и не встречал в php, чтоб мне деструктор понадобился.. Ни разу им не пользовался.

23. Виталий (25.01.2011 / 15:36)
22.ну а если роботать с БД которую самому надо закрывать?(соеденение тоисть) smile

24. Валерий (25.01.2011 / 16:01)
Ну я с такой бд не работал puls

25. ramzes (25.01.2011 / 19:58)
23. Виталий Николаевич, деструктор сам вызывается в конце скрипта
ненадо изобретать велосипед

26. Виталий (25.01.2011 / 22:00)
25.я знаю =) мы не об визове а об потребности

27. ramzes (25.01.2011 / 22:04)
какой? в чем?

28. Виталий (25.01.2011 / 22:20)
26.потребностях деструктора

29. Стасон (25.01.2011 / 22:24)

ВОПРОС : допустим создаеться 2 обекта класов
$obj1 = new myClass();
$obj2 = new my2Class();
у каждого класа есть конструктор и деструктор.Деструктор какого обьэкта будет вызиваться последним?
Того на которого ссылка уничтожится последней.

30. Виталий (25.01.2011 / 22:46)
29.уже человек внятно на тестировании обянсил...

31. ramzes (26.01.2011 / 00:01)
Виталий Николаевич (25 Января 2011 / 22:20)
26.потребностях деструктора
повторюсь
какой потребности?
в чем именно?

32. Виталий (26.01.2011 / 00:22)
31.прочтите посты hello ).....проехали короче kuku )

33. Виталий (08.02.2011 / 21:15)
Вопрос: если в конструкторе класа открыть констуркцию (напрмир IF) а в деструкторе закрить все роботать будет? или надо ето инклудми делать?

34. fux (13.02.2011 / 20:03)
открыть констуркцию
Что?

35. Александр (14.02.2011 / 09:40)
33, скорее всего будет syntax error, а скорее даже на все 100%.
Можно ли скопировать переменные класса в другой класс без юзания циклов?

36. ramzes (14.02.2011 / 20:51)
class myClass extends Class?
а зачем копировать?

37. Александр (15.02.2011 / 17:01)
36, хочу результат mysql_fetch_object в свой класс переместить.

38. Titov (16.02.2011 / 21:49)
<?php
////1 вариант
if($flag !== 1){ .....} 
и
//// 2 вариант
if($flag != 1){ .....} 
?>
иногда в скриптах встречаю как в первом иногда как во втором, разница какая между ними? Есть ли смысл ставить еще одно "=" ?

39. Виталий (17.02.2011 / 00:39)
ето не ооп но....если ещё = то идет сравнение типов вроде )))

40. Ден (17.02.2011 / 00:41)
а я чет думал всегда, что если стоит отрицание то оно идет вместо еще одного =

41. Александр (17.02.2011 / 18:43)
38,
<?php
if('0'==0) echo '"0"=0'; else echo '"0"не равно 0<br \>';
if('0'===0) echo '"0"=0'; else echo '"0"не равно 0';
?>


42. ramzes (17.02.2011 / 19:37)
Виталий Николаевич (17 Февраля 2011 / 00:39)
ето не ооп но....если ещё = то идет сравнение типов вроде )))
не совсем так, сравнение с учетом типа данных
'1' не равно 1 при === и равно при ==

43. Виталий (19.02.2011 / 23:26)
Вопроc:
допусти есть ксласс DB в котором в конструкторе подключаеться к БД
есть класс User который в конструкторе делает запрос к БД
Если создать на странице 2 обьекта
$db = new DB();
$user = new User();
то БД будет доступна для класса User?тоисть доступ к обьекту db будет или надо передавать в User обьект БД ?

44. Саня (20.02.2011 / 00:10)
Будет

45. Виталий (20.02.2011 / 00:40)
у меня какойто бред получаеться с классами и require_once...один файл с той же директории грузит а другой пишет что нет...НО БЛИН ОН ЕСТЬ!!!

46. ramzes (20.02.2011 / 13:48)
Santez (20 Февраля 2011 / 00:10)
Будет
не будет
в область функции объект надо передавать явно, иначе его не будет в ней

47. Саня (20.02.2011 / 14:11)
Я имею в виду что допустим если в класе ядра в конструкторе мы подключаемся к бд,то в другом класе я могу юзать мускул запросы. В джоне так по крайней мере.
Если неразбериха с файлами классов,то кинь их в одну папку и используй __autoload()

48. Виталий (20.02.2011 / 15:20)
47.так и делаю..
а как надо прописывать пути на инклуды? с места где класс или с места где обьэкт создан???...
как вообще получить главную папку...??

49. ramzes (20.02.2011 / 15:36)
48. Виталий Николаевич, http://www.php.net/manual/en/language.oop5.autoload.php

50. Виталий (20.02.2011 / 15:41)
49.я знаю об етом! но мне надо инклюдить не классы в классах

51. ramzes (20.02.2011 / 15:46)
тогда я не знаю что тебе надо

52. Виталий (20.02.2011 / 15:52)
<?
class Page
{

public function __construct ()
               {
			   
			   require_once("Theme/Main/head.php");
			   
			   
			   }
public function __destruct ()
               {
			   require_once("Theme/Main/foot.php") ;
			   
			   }
}

?>
Какойто прикол у меня ...1 файл грузит а второй нет..но он есть в той папке
...

53. Саня (20.02.2011 / 16:08)
У тебя показ ошибок включен? Неужели нет никаких ошибок в таком случае? Попробуй вызвать деструктор явно через unset($obj)

54. Вова (20.02.2011 / 18:15)
Как мне записать в Базу переменую а потом Ее взять привязкапо ип идет

55. ramzes (20.02.2011 / 18:32)
52. Виталий Николаевич, и для этого надо класс организовывать?

Добавлено через 00:25 сек.
54. Layt, щаззз медиума вызовем

56. Вова (20.02.2011 / 18:36)
CREATE TABLE IF NOT EXISTS `gameanswer` (
`answer_id` mediumint(8) unsigned NOT NULL auto_increment,
`answer_vote_id` smallint(4) unsigned NOT NULL,
`answer_option` varchar(50) NOT NULL,
`yes` smallint(4) unsigned NOT NULL default '0',
`answer_result_yes` smallint(4) unsigned NOT NULL default '0',
`answer_result_no` smallint(4) unsigned NOT NULL default '0',
PRIMARY KEY (`answer_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=10 ; вот база
Нужна записать в yes Правильной ответ и потом ево извлечь

57. Виталий (20.02.2011 / 19:32)
53.включен чтото типо не может загрузить
55.ты же не знаеш моей задумки...

58. Виталий (20.02.2011 / 20:48)
Warning: require_once(Theme/Main/foot.php) [function.require-once]: failed to open stream: No such file or directory in S:\home\localhost\www\oopcms\MAIN\Page.php on line 14

Fatal error: require_once() [function.require]: Failed opening required 'Theme/Main/foot.php' (include_path='.;/usr/local/php5/PEAR') in S:\home\localhost\www\oopcms\MAIN\Page.php on line 14

Добавлено через 08:31 сек.
53. когда явно вызываю то все ок!!...а почему так ...мне надо так вызывать

59. Марсель (20.02.2011 / 23:23)
он тебе пишет же, нет такого файла / директории

60. ramzes (20.02.2011 / 23:29)
$_SERVER['DOCUMENT_ROOT'] в адрес добавь и проверь еще раз адрес то верен или нет

61. Виталий (21.02.2011 / 00:18)
но непойму 1 файл все ок грузит а второй...может денвер тупит?...он уже не один винодвс пережил

62. Марсель (21.02.2011 / 01:11)
он не может тупить)) Смотри, может где буква на русском и т.д) перепиши URL до файла заного.
и лучше припиши $_SERVER['DOCUMENT_ROOT'], быстрей будет)

63. Виталий (21.02.2011 / 19:44)
62.все хоррошо с именем...
когда явно удаляю обьект unset($page); то все ок...но почему?))

Добавлено через 08:25 сек.
кстате с $_SERVER['DOCUMENT_ROOT'] не открывает вообще ничего)

64. Виталий (21.02.2011 / 20:15)
почему ето выхывает ошибку?
private $log = $_COOKIE['id'];
private $pass = $_COOKIE['pass'];

public function is_user($login=$this->log,$pass=$this->pass)


65. Виталий (21.02.2011 / 20:32)
мдаа...трудно мне даеться ООП...кругом ошибки....там обьект надо передать там...я так понял обьект например БД надо передавать функции в которой есть return а другие как бы инклудяться)

66. ramzes (21.02.2011 / 21:42)
class SomeClass{
private $db;
function __construct(
// 1 $db
){
// 2 global $db;
$this->db = $db;
}
}

67. Nu3oN (21.02.2011 / 22:09)
ну или так
<?php
$obj = new SomeClass;
$obj -> db = $db;
<?php
class SomeClass {
   var $db;

   function test()
   {
       // $this -> db
   }
}


68. ramzes (21.02.2011 / 22:32)
67. Nu3oN, только тогда публичный должен быть что бы из вне назначать можно было

69. Марсель (22.02.2011 / 10:12)
68. ramzes, это не обязательно)

70. ramzes (22.02.2011 / 15:55)
69. ofroke, как это?
приватный не переназначишь из вне, ошибку выдаст же

71. Виталий (22.02.2011 / 18:27)
ответьте пожалуйста на пост 64 smile

72. Марсель (22.02.2011 / 18:53)
ramzes (22 Февраля 2011 / 15:55)
69. ofroke, как это?
приватный не переназначишь из вне, ошибку выдаст же

ну ты протести)

Добавлено через 00:32 сек.
71. Виталий Николаевич, ошибка какая?

73. Виталий (22.02.2011 / 19:27)
72.пишет что чтото с синтексом...

74. Марсель (22.02.2011 / 19:29)
ну это ясно уже..
ты скопируй..

75. Виталий (23.02.2011 / 00:05)
Parse error: syntax error, unexpected T_VARIABLE in S:\home\localhost\www\oopcms\MAIN\User.php on line 6


76. Виталий (23.02.2011 / 00:32)
Вопрос:
Естиь страница индекс есть foot.php
в индексе создаеться обьэкт класса
а в конце индекса инклудиться фоот...деструктор разве до инкуда вызываеться?

77. Марсель (23.02.2011 / 07:25)
деструктор в конце вызывается.
--
дай 6строку в user.php

78. Виталий (24.02.2011 / 12:38)
private $log = $_COOKIE['id']; 
private $pass = $_COOKIE['pass']; 

public function is_user($login=$this->log,$pass=$this->pass)


79. Алиен (24.02.2011 / 14:42)
ООП нужно использовать с умом, а не везде его пихать.В этом отношении мне нравится JohnCMS, довольно грамотно все сделано

80. Виталий (25.02.2011 / 23:43)
Ето не обсуждение ООП а вопрос/ответ hello

81. Виталий (27.02.2011 / 17:33)
Видно мало здесь ООПщиков sad

82. Lugaro (27.02.2011 / 18:38)
AntiXrist (24 Февраля 2011 / 13:42)
ООП нужно использовать с умом, а не везде его пихать.В этом отношении мне нравится JohnCMS, довольно грамотно все сделано
Что конкретно там грамотно реализовано можешь написать? Я даже ради интереса скачал чтоб глянуть, нечего грамотного я там не увидел и вообще сами классы из \incfiles\classes далеко уходят от самой идее ООП


core.php - Тут ещё ладно, но всё равно не вижу смысла в этом классе, половину методов user_* вообще можно было вынести в отдельный класс и так было бы логичней, а все остальное вернуть как раньше было и не лепить горбатого, и к тому же некоторые методы вообще лишние


comments.php - Вообще сложно назвать классом, это тоже самое что взять весь код ротора в claass rotor{...__construct(){}} и потом выводить содержимое echo new rotor(); я конечно образно говорю, работать то не будет, но думаю суть примера понятна


functions.php - Где же тут грамотный ооп? тут просто набор методов которые совершено не имеют связи, смысла в нем я не вижу, я конечно понимаю что автор хотел сделать, он хотел изолировать все функции чтоб не было конфликтов с левыми модулями в которых есть функции с похожими именами, вообще достаточно было добавить ко всем функциям прификс к примеру JohnCms и как я уже говорил не лепить горбатого. Не стоит забывать что вызов метода в разы медленней вызова обычно функции и в итого этим классом автор просто ухудшил скорость работы движка, короче говоря это не ооп


mainpage.php - Я смотрю в нем только методы относящиеся к новостям, вообще не понятно зачем они там, всему этому делу место в какой нить model_news, а из mainpage::news вообще можно сделать просто веджет и не пихать его в класс ещё и вместе с разметкой.

======
Вообще я не люблю обсуждать чужие косяки и кричать что все гoвно кодеры итп, это так сказать не в моем стили, так что если чо, я не чем не хотел обидеть атора кода, а отписал лишь потому что ты заявил что там грамотно все реализовано. Короче говоря нужно обосновывать свои слова ато вон новички сейчас прочтут твой пост и пойдут учится ООП с такого "грамотного" примера
PS "ООП нужно использовать с умом, а не везде его пихать." вот как рас таки в джоне оно используется не с умом и пихается совсем не там где оно нужно

83. Саня (03.03.2011 / 01:28)
.::lugaro::. (27 Февраля 2011 / 18:38)

functions.php - Где же тут грамотный ооп? тут просто набор методов которые совершено не имеют связи, смысла в нем я не вижу, я конечно понимаю что автор хотел сделать, он хотел изолировать все функции чтоб не было конфликтов с левыми модулями в которых есть функции с похожими именами, вообще достаточно было добавить ко всем функциям прификс к примеру JohnCms и как я уже говорил не лепить горбатого. Не стоит забывать что вызов метода в разы медленней вызова обычно функции и в итого этим классом автор просто ухудшил скорость работы движка, короче говоря это не ооп

Ну прямо уж ты загнул в разы )) Конечно медленнее, но "на", а не "в"
Например при вызове статического метода и обычной функции в которых просто возвращает результат
return htmlspecialchars(trim($str), ENT_QUOTES);
на строке
$str ='1234567890-=qwetyuioopp[]\adfghjkl;;sdfgujhj';
при 10000000 итераций (на денвере тест был)
Метод проигрывает всего на 4 секунды (26 и 22 сек соответственно)
Конечно хз что там на джоне и как оно там все организовано, но по стравнению с вордпресом и его классами джон просто мегабыстр и мегалегок .

84. Lugaro (03.03.2011 / 07:34)
83. sanzstez, Ну в разы, да, оговорился, но сути это не меняет, пользы от самого класса не какой кроме как более медленная работа и затрата оперативной памяти. Там просто взяли весь набор функций которые раньше были в \incfiles\functions.php и впихнули их в класс, грамотным ООП'ом это сложно назвать
Конечно хз что там на джоне и как оно там все организовано, но по стравнению с вордпресом и его классами джон просто мегабыстр и мегалегок
Ну по сути в джоне то и классов нет, в папке \incfiles\classes я всего 4 фала нашел

85. Андрей (16.03.2011 / 10:03)
Подскажите как сделать страницу типа http://site.ru/index.php?id=1

86. Марсель (16.03.2011 / 10:18)
$_GET['id']

87. Андрей (16.03.2011 / 11:57)
Нет это я понимаю а как там страницу создавать в индексе чтоб именно с этого места было ид 1 а с другого ид 2 и т.д

88. ZipeR (16.03.2011 / 12:15)
87: Php-coder, ну если я тебя так понял то через switch-case

89. Андрей (16.03.2011 / 14:23)
А код с примером можешь написать?

90. Саня (16.03.2011 / 14:37)
89. Php-coder, товарищь! Ты темой ошибся. Тебе в общие вопросы.

91. Виталий (16.03.2011 / 14:37)
89. Php-coder,
<?
switch ((int)$_GET['id'])
{
case 1: 
#если id=1
break;
case 2:
#если id=2
break;
default:
#если id=не 1 и не 2...
break;
}
?>
вроде так....ето пишеш в той станичке где надо применять действия...
чтоб передать параметр надо ссылку писать
<a href="страница где действия.php?id=1" >Name</a>


92. ZipeR (16.03.2011 / 14:42)
switch($_GET['id'])
{
default:
Код основной страницы.
break;
case 'id1':
Код твоего ID=1
break;
}
Вызываешь всё это дело так
http://site.ru?id=id1.
Так то это велосипедный понт,для этого писать дополнение надо. чтоб выдавался личный id

93. Андрей (16.03.2011 / 17:28)
Ага спасибо smile

94. Вова (08.04.2011 / 11:07)
И что ЛОудше?? Стандарт ПИх или ООП)))

95. Анатолий (10.04.2011 / 15:04)
Layt (8 Апреля 2011 / 10:07)
И что ЛОудше?? Стандарт ПИх или ООП)))

Сам понял что сказал?)
ООП - это тоже стандартный пых, просто у всех понятия стандартов разные ;)

96. Петруха (24.04.2011 / 14:27)
Что бы использовать объекты, нужно научиться мыслить процедурно, а объектами. Иначе смысла вам не увидеть

97. Ant0ha (14.05.2011 / 17:45)
suhonok, ты опечатался наверно)
В последнее время свой код представляю как объекты. Пользователь - объект, сообщение - объект, запрос - объект и тд и тп. От этого и жить легче) Код краток, понятен и легко расширяемый)
В более-менее крупных прожектах процедурный подход - зло.

Добавлено через 00:57 сек.
нужно научиться мыслить НЕ процедурно

да, ты наверно просто "НЕ" пропустил)

98. Петруха (18.05.2011 / 07:11)
Это ж надо взять и вчитаться так)

99. Sep (24.07.2011 / 12:04)
Начинаю по тиху осваивать, скоро вопросы попрутsmile

100. Виталий (24.07.2011 / 15:37)
Вопрос : может обьєкт ссылаться на переменную создавая другой обьэкт ?(мб. глупость smile )

Добавлено через 00:39 сек.
(вообщем как в С++, в VCL)

101. Виталий (24.07.2011 / 15:53)
хотя в С++ ето роде указатели...запутался...)))

102. Nu3oN (25.07.2011 / 00:20)
id1, муха тоже самолет, а железо как пластмас)))
Или я дурак, или объясни более доступно =)

103. Данис (26.07.2011 / 23:42)
Немогу понять почему не могу получить значение переменной в вввиде
$user= new User($id_user);
$user->id;
<?php
/**
* Класс для работы с пользователем
*/
class user{

protected $data = array();

function __construct()
{
$this->user($id_user);
}

function __get($name){
return $this->data[$name];
}

function __set($name, $value){
if (!isset($this->data['id']))return false;
$this->data[$name] = $value;
}

protected function user($id_user)
{
$db = Registry::get('db');
$id_user = input_valid::clear_var($id_user ,'int');
if($db->query('SELECT COUNT(*) FROM `user` WHERE `id` = "'.$id_user.'" LIMIT 1')==1) {
$sel = 'SELECT * FROM `user` WHERE `id` = "'.$id_user.'" LIMIT 1';
$this->data = $db->query($sel)->fetch(PDO::FETCH_ASSOC);
}
}

}

Помогите пжл.

104. ramzes (26.07.2011 / 23:51)
function __construct()
{
$this->user($id_user); ты эту переменную из воздуха берешь? шаман однако
}

105. Виталий (27.07.2011 / 01:16)
103.Я всмысле возможно ли копировать обьект передавая его по ссылке...
и как ето влияет на производительность...
дело в том что в С++ библиотеке VCL когда подключаеться класс там инклудить етот клас (в файле класса уже создаеться обьект) и что использовать етот обькт делають ссылки
TForm *TForm1;
(както так)

106. ramzes (27.07.2011 / 02:28)
$a = new Class;
$b = $a;
$b->method;
Ты про это что ли?
не понятно выражаешься..

107. Петр (27.07.2011 / 09:32)
В php5> все объекты автоматически передаются по ссылке, т.е. в примере выше $b и $а один и тот же объект (аналогично в java и js). В php 4, вроде, нужно писать для этого $b=&$a;

Добавлено через 05:34 сек.
А вообще любой объект - массив свойств и функции... (в памяти они хранятся именно так) Поэтому, можно использовать ООП подход даже без классов.

108. Данис (27.07.2011 / 10:01)
ramzes (26 Июля 2011 / 23:51)
function __construct()
{
$this->user($id_user); ты эту переменную из воздуха берешь? шаман однако
}
Все должно работать ) ,я так сто раз делал D , а вот с массивчиком беда получается не могу получить ,может естьу кого еще предположения ,код немного подправил
<?php
/**
* Класс для работы с пользователем
*/
class User{

 protected $data = array();

 function __construct()
 {
 $this->user_go($id_user);
 }
 
 protected function user_go($id_user)
 {
 $db = Registry::get('db');
 $id_user = input_valid::clear_var($id_user ,'int');
 if($db->query('SELECT COUNT(*) FROM `user` WHERE `id` = "'.$id_user.'" LIMIT 1')==1) {
  $sel = 'SELECT * FROM `user` WHERE `id` = "'.$id_user.'" LIMIT 1'; 
  $this->data = $db->query($sel)->fetch(PDO::FETCH_ASSOC);
  }
 }
 
 function __get($name){
 return $this->data[$name];
 }
 
 function __set($name, $value){
 if (!isset($this->data['id']))return false;
 $this->data[$name] = $value;
 }
}

Добавлено через 01:15 сек.
Заметил свой косяк в конструктор значение переменной не передал ,сейчас проверим )

Добавлено через 02:38 сек.
Все теперь работает )

109. ramzes (27.07.2011 / 10:30)
108. Danis92, Я тебе с самого начала об этом говорил

110. Данис (27.07.2011 / 20:24)
Неполучает массив $user ,думаю $sel = 'SELECT * FROM `user` WHERE `login` = "'.$login.'" LIMIT 1';
$user = $db->query($sel)->fetch(PDO::FETCH_ASSOC); из-за этого с id он норм работает ,а с логином не получится?

111. Виталий (28.07.2011 / 02:11)
106. smile
107. klass

112. ramzes (28.07.2011 / 02:40)
107. Im-ieee, в 5.3 вроде бы отменили &, нет?
(И на сколько я понимаю обьекты не копируются, а ссылаются, поправьте если ошибаюсь, не вникал в эти дебри)

113. Lugaro (28.07.2011 / 03:04)
ramzes (28 Июля 2011 / 01:40)
107. Im-ieee, в 5.3 вроде бы отменили &, нет?
Нет не отменили, но чтоб создать ссылку на объект & ненужна
(И на сколько я понимаю обьекты не копируются, а ссылаются, поправьте если ошибаюсь, не вникал в эти дебри)
Верно, а для создания полной копии $b = clone $a;

114. Виталий (29.07.2011 / 00:08)
112.Во во...А дело иногода интерестное а информаци мало....так и не понять что как роботает на низком уровне =)

115. KOZZ (29.07.2011 / 04:11)
начал писать свой класс для работы с mysqli... блин ну как же это удобно оказывается - то klass
я имею ввиду ООП

116. KOZZ (29.07.2011 / 06:29)
сделал наследование родного класса mysqli и дополняю своими фишками klass

117. Виталий (29.07.2011 / 09:55)
что-то MySQLi мне не понраву, предпочитаю PDO smile

118. Петр (29.07.2011 / 12:45)
113. .::lugaro::., "создать ссылку на объект" - не совсем правильно, т.к. ссылка создается уже при использовании new. А & к такой ссылке естественно будет ошибкой.

119. Петр (29.07.2011 / 14:21)
Например, $t=new a(); (ссылка на объект) $t->a='a'; $r=$t; (ссылка присваивается другой переменной) unset($t); ( удаляется ссылка на объект, а не сам объект) echo $r->a; (выводит 'а' - объект все еще болтается где-то в памяти...)

Добавлено через 06:14 сек.
Хотя, однако, & все еще работает - наверное, для совместимости.

120. Lugaro (29.07.2011 / 15:36)
Ясно .

121. Lugaro (29.07.2011 / 15:57)
Вот на счет "Хотя, однако, & все еще работает - наверное, для совместимости." тоже не согласен, оставили её не зря и не для совместимости
<?php
$a = new a();
$b  = $a;
$b = NULL;
var_dump($a); // object(a)[1]
А теперь с &
<?php
$a = new a();
$b  = &$a;
$b = NULL;
var_dump($a); // null
И как известно объект удалится тогда когда на него не останется не одной ссылки

122. ramzes (29.07.2011 / 16:01)
121. .::lugaro::., я ошибся, в php6 не будет &
будет выдавать E_STRICT

123. Lugaro (29.07.2011 / 16:09)
Ну наверно что-то новое придумали иначе не вижу смысла убирать, так то полезная штука однако ))

124. Петр (29.07.2011 / 16:39)
121. .::lugaro::., как-то нелогично. Например, если во втором случае написать еще, скажем, $c=$a, а только потом удалять $b, то объект останется (в $c). Я могу придумать только то, что интерпретатор, когда видит &, заменяет все переменные $b на $а.

Добавлено через 02:51 сек.
Т.е. вообще не создает переменную $b. А удалять &, конечно, не надо - есть ведь еще и массивы, и другие типы данных.

125. KOZZ (29.07.2011 / 16:48)
123. .::lugaro::., объясните мне дураку, как эти ссылки можно использовать?
ну я имею ввиду где и для чего они нужны вообще?

126. Studentsov (29.07.2011 / 16:50)
просто переменные копировать дабы не занимать память

127. ramzes (29.07.2011 / 16:58)
Дмитрий (29 Июля 2011 / 16:50)
просто переменные копировать дабы не занимать память
копировать это как раз занимать память
ссылаться куда экономнее
$b = 11111111111111;
$a = $b;
echo $a; echo ($a=>$b); echo (''=>11111111111);

128. Петр (29.07.2011 / 17:04)
Например, в функциях возможность "возвращать сразу несколько значений" (почему-то вспомнились процедуры в паскале smile ).

Добавлено через 01:28 сек.
Дмитрий, наверное, имел в виду копирование переменных-ссылок.

129. KOZZ (29.07.2011 / 17:10)
128. Im-ieee, в функциях? и как же?
да и например массив возвращать не удобнее?

130. Lugaro (29.07.2011 / 17:20)
ну намного удобней писать так
$a = 'abcd';
повернуть($a);
покрутить($a);
расстрелять($a);
echo ($a);
Чем так
$a = 'abcd';
$a = повернуть($a);
$a = покрутить($a);
$a = расстрелять($a);
echo $a;

131. Петр (29.07.2011 / 17:23)
Я не зря поставил кавычки. smile Просто писать как-нибудь так function func($argument, &$return1, &$return2) и "внутри" присваивать этим переменным нужные значения. Массив занимает больше места и его использование может быть неудобным (в preg_match, к примеру).

132. ramzes (29.07.2011 / 17:25)
130. .::lugaro::., как бэ движемся к ооп интерфейсу, это все само отпадет со временем,конкретно твои примеры были обозначены как
"" Возврат по ссылке вызовет ошибку
И
1 <?php $foo =& new StdClass(); ?>
и
1 <?php function &foo ?>
теперь вызовут ошибку уровня E_STRICT.""

133. Артур (29.07.2011 / 17:39)
Использование ссылок следует из самого понятия переменной. Переменная в любом ЯП является ссылкой на область памяти, при чем примитивные типы (string, int, bool) автоматически передаются по значению, то есть при присвоении одной ссылки другой (одной переменной другой $x = $y) область памяти по адрему первой ссылки ($y) копируется и ссылка на нее передается во вторую ссылку ($x). При передаче сложных структур (obj, array) копировать память становится накладно и они передаются по ссылке без автоматического копирования. Так вот механизм ссылки позволяет присваивать элементарные типы без использования механизма автоматического копирования. Обастью применения может служить, к примеру, программа, одна из функций которой призвана получить в качестве аргумента ссылку на элементарный тип данных. Ну и так дальше

134. KOZZ (29.07.2011 / 17:42)
133. Bashka, это все хорошо, а может кто - нибудь реальный пример привести, в котором оправдывалось бы все это дело с практической стороны.

135. Петр (29.07.2011 / 17:46)
132. ramzes, ссылки используются не только в ООП, а & нельзя будет использовать лишь по отношению к объектам (а они передаются по ссылке и без &). Конечно, иногда функции без ссылок неудобны (если мне нужна и "повернутая" и "расстрелянная" переменная одновременно), но часто это действительно неудобно.
133. Bashka, где это string элементарный тип? Это же по сути массив символов. А где-то и int и char объекты. Тема про php вообще-то)

136. Артур (29.07.2011 / 17:56)
У меня был такой вот случай. Есть объект, в методе которого происходит перебор одного ассоциативного массива, имена элементов этого массива соответствуют именам свойств объекта, так вот свойства объекта с данными именами необходимо было передать по ссылке в переменную, то есть чтобы некоторая переменная ссылалась на свойства объекта, имена которых соотвествуют имени текущего элемента массива в переборе, решил так:
$a = &$this->$key;

Bashka, где это string элементарный тип? Это же по сути массив символов.
И не смотря на это, string это элементарный тип данных

А где-то и int и char объекты. Тема про php вообще-то)
Так и я о php

137. Петр (29.07.2011 / 18:00)
134. eGo, я ж уже написал - preg_match. Третий параметр - ссылка. Если бы функция возвращала массив, то код выглядел бы так - $arr=preg_match(...); if($arr[0]){ print_r($arr[1]); } А так можно проще - if(preg_match(... $arr)){ print_r($arr); }

138. Артур (29.07.2011 / 18:12)
У меня одного такие проблемы с хомяком ? (64K)

139. Петр (29.07.2011 / 18:21)
136. Bashka, и где, интересно, string элементарный тип, а array нет? В php и то, и то копируется по значению - т.е. "элементарные".

140. Артур (29.07.2011 / 18:28)
На сколько мне известно элементарность типа определяется не способом его передачи, а умозаключениями разработчиков языка. Несколько манов убедили меня что string элементарен, а array нет. Могу конечно ошибаться.

Вобщем то говоря, сути моего поста не меняет ) некоторые типы передаются автоматически с копированием памяти, чтобы этого избежать используется ссылка

141. Петр (29.07.2011 / 18:56)
140. Bashka, ну да, конечно, элементарность - это в принципе условно. ) А в передаче по ссылке кстати, память тоже используется так как адрес имеет размер (на 32-битной машине столько же, сколько int - 4 байта)

142. Роман (25.11.2011 / 13:36)
Народ объясните что я не так делаю?
* * *
$db = new Cdb;
$info = auth($db, $nick, $pass); // Тут обычная функция
* * *
В Денвере работает нормально, залил на бесплатный хостинг, выдает ошибку Ошибка HTTP 500 (Internal Server Error): При попытке сервера выполнить запрос возникла неожиданная ситуация.

143. Роман (25.11.2011 / 17:59)
Разобрался блин, это хостинг что-то тупил

144. ★☆ ИгRok™ ☆★ (04.12.2011 / 21:04)
народ,где ошибка:
$q = mysql_result(mysql_query('SELECT COUNT(*) FROM number'), 0);

$total = mysql_num_rows($q);



if ($total>0){



echo 'список номеров';
}
else
{
echo'номеров нету';
}

Выдает ошибку в этой строке $total = mysql_num_rows($q);
почему? Не пойму!

145. Виталий (04.12.2011 / 21:16)
PraeSiDio_DeI (4 Декабря 2011 / 21:04)
народ,где ошибка:
$q = mysql_result(mysql_query('SELECT COUNT(*) FROM number'), 0);

$total = mysql_num_rows($q);



if ($total>0){



echo 'список номеров';
}
else
{
echo'номеров нету';
}

Выдает ошибку в этой строке $total = mysql_num_rows($q);
почему? Не пойму!

1) именно ошибка какая?
2) причем может тут быть ооп?

146. ★☆ ИгRok™ ☆★ (04.12.2011 / 21:17)
145. Виталий Степанович G, разделом ошибся. Сейчас ошибку покажу

Добавлено через 00:43 сек.
вот ошибка:
Warning: mysql_num_rows() expects parameter 1 to be resource, string given in /usr/home/nkat/htdocs/icq/number.php on line 19

147. Андрей (04.12.2011 / 21:23)
Написано же. Ожидается ресурс, а не строка. Там mysql_num_rows не нужно.

148. ★☆ ИгRok™ ☆★ (04.12.2011 / 21:24)
147. Тогда как правильно? Я раньше такой ошибки просто не встречал

149. Андрей (04.12.2011 / 21:28)
Переменная $q уже содержит количество номеров.

150. ★☆ ИгRok™ ☆★ (04.12.2011 / 21:29)
значит получается нужно так: if($q>0)?

151. Андрей (04.12.2011 / 21:35)
да. Или лучше $q смени на $total.

152. ★☆ ИгRok™ ☆★ (04.12.2011 / 21:48)
151. Фанат, Изменение авторитета
Ваш положительный голос за пользователя Фанат успешно оставлен!
В данный момент его авторитет: 15
Всего положительных голосов: 17
Всего отрицательных голосов: 2

Спасибоsmile

153. Артур (12.12.2011 / 20:09)
Может кто расскажет какими оо-паттернами и как пользовался?

154. Александр (12.12.2011 / 20:16)
Вопрос автора в первом посте огорчил... Nominal огорчил ещё больше. Дальше не стал читать... Мдааа, здесь как всегда умом не блещут =) Стыд (facepalm)

155. Артур (12.12.2011 / 20:21)
Честно говоря да, не встречал еще среди вап-разработчиков хороших ооп программистов

156. Phantom (13.12.2011 / 09:06)
По поводу ссылок. Насколько я знаю, в php все типы передаются почти как ссылки, а клонируется только при модификации данных. Допустим у нас есть большой массив с кучей данных. Мы передаём его в функцию обычным способом (не по ссылке), чтобы выбрать из него только уникальные значения в цикле и вернуть их. При этом этот огромный массив в памяти не создаст копию себя. Переменная копируется в памяти только если происходит модификация данных. То есть если наша функция по ходу работы начнёт вносить в этот большой массив какие-то изменения, тогда создастся его копия в памяти.

Уже сейчас попытка передать переменную по ссылке ololo(&$a); вызывает ошибку. И это правильно. Потому что:
1) Если мы хотим передать переменную по ссылке внутрь функции, чтобы не делать копию данных в памяти, то в этом нет смысла, так как копия данных итак не создастся, если тело функции написано правильно и не модифицирует переданный массив (а если и модифицирует, то вероятно затем вернёт его, в любом случае автор функции сделал это по каким-то убеждениям, быдлокодеров не в счёт).
2) Мы можем (и не должны с точки зрения инкапсуляции) не знать как устроена функция внутри, и что она делает с получаемыми данными. Если функция не объявлена как function ololo(&$a){, то нефиг в неё и пытаться передавать переменную по ссылке, иначе она может нам изменить данные в ней. А вдруг переменную мы будет после вызова функции использовать где-то ещё?

157. Артур (13.12.2011 / 09:45)
Элементарные типы передаются по значению (копируются), иначе было бы накладно

158. Phantom (13.12.2011 / 10:10)
157. Bashka, ну я говорил применительно к массивам в первую очередь. Они копируются только при модификации. Насчёт строк не уверен. Ну а числа скорее всего всегда копируются.

159. Артур (13.12.2011 / 17:03)
Всегда считал и продолжаю считать даже в отношении пхп что массив это не элементарный тип данных. Это базовая конструкция языка, но более сложная нежели элементарные типы

160. Николай (11.01.2012 / 15:43)
144. PraeSiDio_DeI,
if (!$total) 
{ 
  echo "Ошибка при обращении к блоку позиций каталогов"; 
  echo "<pre>"; 
  echo $q; 
  exit(); 
}

напиши таким образом что выдает?

161. Юрий (11.01.2012 / 16:51)
PraeSiDio_DeI (4 Декабря 2011 / 21:04)
народ,где ошибка:
$q = mysql_result(mysql_query('SELECT COUNT(*) FROM number'), 0);

$total = mysql_num_rows($q);



if ($total>0){



echo 'список номеров';
}
else
{
echo'номеров нету';
}

Выдает ошибку в этой строке $total = mysql_num_rows($q);
почему? Не пойму!
А зачем тут mysql_num_rows?

$total = mysql_result(mysql_query('SELECT COUNT(*) FROM number'), 0);
if($total > 0){
echo 'список номеров';
}else{
echo 'номеров нету';
}


162. Артур (12.01.2012 / 00:18)
Возможно при запросе ошибка, лучше уж так $q = mysql_query
('SELECT COUNT(*) FROM
number');
if ($q && mysql_num_rows($q)>0)
echo 'список номеров';
else
echo'номеров нету';

163. Юрий (13.01.2012 / 08:41)
Bashka, Вы ведь тоже самое написали, все равно будет такая же ошибка smile

164. Николай (13.01.2012 / 08:47)
Bashka (12 Января 2012 / 00:18)
Возможно при запросе ошибка, лучше уж так $q = mysql_query
('SELECT COUNT(*) FROM
number');
if ($q && mysql_num_rows($q)>0){
echo 'список номеров';}
else{
echo'номеров нету';}
вот так думаю надо

165. ramzes (13.01.2012 / 08:50)
if($q > 0){

166. Артур (13.01.2012 / 10:05)
163. FаN, совсем не то же самое ;)

167. Ant0ha (13.01.2012 / 15:50)
Bashka (12 Января 2012 / 00:18)
Возможно при запросе ошибка, лучше уж так $q = mysql_query
('SELECT COUNT(*) FROM
number');
if ($q && mysql_num_rows($q)>0)
echo 'список номеров';
else
echo'номеров нету';

бред какой-то, у тебя всегда в таком случае будут номера, даже когда их нет

так правильныей:
$result = mysql_query("SELECT COUNT(*) FROM table");
$count = mysql_result($result, 0);


168. Артур (13.01.2012 / 18:45)
Почему ?

169. Валик (13.01.2012 / 18:47)
Люди, а вы уверены, что PHP это ООП???

170. Артур (13.01.2012 / 18:49)
ПХП это ЯП, а ООП это классы, объекты, инкапсуляция, наследование и полиморфизм. В пхп все есть

171. ramzes (13.01.2012 / 20:19)
Bashka (13 Января 2012 / 18:45)
Почему ?
Потому что ты считаешь колличество элементов в запросе с count(*).
Их всегда 1.
$q['count(*)']
Равный 0 (собственно тут и надо условие) или не равный 0, но элемент всегда естб

172. Ant0ha (14.01.2012 / 10:39)
да, и mysql_num_rows() будет всегда возвращать 1

173. Александр (21.03.2012 / 00:36)
прошу помощи знающих ооп.
есть маленький код.
$book = simplexml_load_file( '2.fb2' );
$a='title-info';
$b = '@attributes';
$c = $book->description->$a->sequence;
команда print_r( $c); дает следующее
SimpleXMLElement Object ( [@attributes] => Array ( [name] => Хроники Дженнака [number] => 1 ) )
а команда print_r($c->$b); почемуто
SimpleXMLElement Object ( )
вместо дампа массива.
мне нужно достать именно массив.

174. Александр (21.03.2012 / 01:05)
вопрос снят

175. ramzes (21.03.2012 / 01:10)
rastoman (21 Марта 2012 / 01:05)
вопрос снят
класс который тебе дали прилично кривоват, его процентов на 50% точно править надо, на сколько я помню

176. Александр (21.03.2012 / 01:23)
175. ramzes, я удалил оттуда две функции и добавил одну свою. Главное что я понял принцип построения xml вfb2. Пару часов и гугл сделали свое дело. Пример lib.hostik.in (с компа). Я вывел вверху нужные мне данные

177. ramzes (21.03.2012 / 01:30)
176. rastoman, теги вырежи из данных, там их много попадается (см титлы у себя)

178. Момору (23.09.2012 / 15:50)
Привет всем)
Вкурсе можно ли обращатся к переменной экземпляра из статического метода класса?
Например:
<?php
class vasija
        {
            protected $person = false;
            public static function set_person()
            {
                $this->person=true;
            }
            public static function get_person()
            {
                return $this->person;
            }
        }
?>
Можно ли сделать так, или обязательно использовать self, parent, static?
Зарание Вам благодарен)

179. Богдан (23.09.2012 / 16:02)
178. Если ты работаешь со свойствами объекта - метод не может быть объявлен как статический. Статические свойства и методы не принадлежат объекту поэтому из них нельзя получить доступ к его свойствам и методам.

180. Момору (23.09.2012 / 16:05)
179. G_A_N_J_A_R, то есть $this будет не уместно?

Добавлено через 06:18 сек.
А если я потом вдруг вздумаю сделать вот так:
vasija::get_person();
Выведет true/false, или же выдаст ошибку?

181. Виталий (23.09.2012 / 19:20)
180. JaKazanova, переменная $this не определена, в этом случае идет призыв на не объект, в результате выйдет ошибка!

182. Петр (24.09.2012 / 08:46)
Можно как-нибудь так: protected static $obj = new vasija(); ... $obj->person

183. Erika (24.09.2012 / 12:20)
182. Im-ieee, че за бред чекнутого ламмера? Ты хоть сам понял, что накарябал постом выше?

184. Артур (24.09.2012 / 12:59)
Почему бред?

Вообще на этот вопрос уже давали ответ на другом форуме этому автору

185. Виталий (24.09.2012 / 15:29)
erika (24 Сентября 2012 / 12:20)
182. Im-ieee, че за бред чекнутого ламмера? Ты хоть сам понял, что накарябал постом выше?
ничего чокнутого там я не вижу D

186. Петр (25.09.2012 / 06:21)
183. erika, был вопрос, можно ли обращаться к свойству объекта (не статическому) из статического метода класса. Я привел возможный способ. Не стоит здесь демонстрировать свою неадекватность.

187. Дмитрий (25.09.2012 / 12:01)
Как организовать собственную статистику сайта, чтобы выводить посетители\просмотры за сегодня\неделю\месяц? Интересует сама база данных, хранить каждый ip адрес? как обнулять значения на сегодня?

188. Артур (25.09.2012 / 12:31)
При чем тут ООП?

189. Дмитрий (25.09.2012 / 13:57)
пардон, ошибся темой

190. Станислав Крунич (10.08.2013 / 01:48)
Im-ieee (24 Сентября 2012 / 08:46)
Можно как-нибудь так: protected static $obj = new vasija(); ... $obj->person
Нельзя! 3-ой Уг )) ! Во первых это ошибка синтаксиса. а именно, присвоение класса в свойстве за приделами метода, во вторых он protected а ты определил его без наследования. а в третьих ты вызвал его не как static, а как все свойства которые начинаются на P ))))…

191. Влад (30.08.2013 / 06:51)
тема флуд какой-то)
Обьясните для чего нужен метод конструктора?

192. Tegos (30.08.2013 / 08:10)
Не знаю как в PHP, но в основном конструктор служит для задания значений полей.

193. orel (30.08.2013 / 08:24)
191. danan, Конструктор запускается во время создания класса.

194. lekt (30.08.2013 / 11:18)
ZZZZZZ, в php тоже обычно для задания значений свойствам, а вообще можно делать что хочешь.
Danan, смотри например есть такой класс
class User {
	public $name  = "";
	public $login  = "";
	public $password  = "";
	
} 
$user = new User();
//и тебе например нужно задать значения свойствам
//и делать ты этого будешь так :
$user->name = 'vasya';
$user->login ='vasilii';
$user-> ='qeetyc';

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

class User {
	public $name  = "";
	public $login  = "";
	public $password  = "";
	
	
	function __construct($n, $l, $p){
			$this->name  = $n;
			$this->login = $l;
			$this->password = $p;
		
}

//с таким классом можно создать объект вот так :
$user = new User('vasya', 'vasilii', 'qwedgh'); 

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

195. Дмитрий (01.09.2013 / 01:37)
Всем привет! Наконец то руки дошли до библы PDO, и сразу столкнулся с проблемой:
Есть два файла db.php
Его содержание:
try {
  $db = new PDO("mysql:host=localhost;dbname=mydb", user, pass);
  $db->exec("set names utf8");
}
catch(PDOException $e) {
    echo $e->getMessage();
	exit();
}
Второй файл index.php
Его код:
$query = $db->query("SELECT COUNT(*) FROM `user`");
$count = $query->fetchColumn();
echo $count;
Но при просмотре файла index.php в браузере выдает ошибку:
Access denied for user ''@'localhost' (using password: NO)
Хотя встроенные функции mysql_connect(), mysql_select_db() подключаются к бд
P.S. В ООП не силен, это так, для особо одаренных подмечено

196. lekt (01.09.2013 / 02:36)
user и pass нужно в кавычках писать, вот так :
$db = new PDO('mysql:host=localhost;dbname=mydb', 'user' , 'pass');


197. Дмитрий (01.09.2013 / 02:56)
196. lekt, эт просто опечатка была)) в скрипте данные в кавычках

Добавлено через 01:50 сек.
Уже разобрался)) вопрос неактувлеееееееееееееееен

198. Влад (25.11.2013 / 11:34)
Напишите плиз простейший curl класс

199. Артур (25.11.2013 / 19:42)
зачем?

200. Влад (25.11.2013 / 20:09)
Башка (25 Ноября 2013 / 19:42)
зачем?
ну мне надо, так как я часто юзаю кюрл в скрипте

Добавлено через 01:38 сек.
199. Башка,
$url = ';
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_USERAGENT, $userAgent);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookieFile);
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookieFile);
$result = curl_exec($ch);
curl_close($ch);
вот это в класс

201. KpuTuK (25.11.2013 / 20:50)
200. danan, а смысл обвертывать функции классом???
легче раз уж так нужно запихать все это в одну функцию
<?php
function MyCurl($url, $userAgent, $cookieFile) {
$url = ';
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_USERAGENT, $userAgent);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookieFile);
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookieFile);
$result = curl_exec($ch);
curl_close($ch);
return $result;
}
?>


202. Влад (25.11.2013 / 20:54)
KpuTuK (25 Ноября 2013 / 20:50)
200. danan, а смысл обвертывать функции классом???
легче раз уж так нужно запихать все это в одну функцию
<?php
function MyCurl($url, $userAgent, $cookieFile) {
$url = ';
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_USERAGENT, $userAgent);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookieFile);
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookieFile);
$result = curl_exec($ch);
curl_close($ch);
return $result;
}
?>
надо класс

203. Изнаур (25.11.2013 / 20:57)
class Curl{

public function MyCurl($url, $userAgent, $cookieFile) { 
$ch = curl_init($url); 
curl_setopt($ch, CURLOPT_USERAGENT, $userAgent); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookieFile); 
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookieFile); 
$result = curl_exec($ch); 
curl_close($ch); 
return $result; 
}
}
E

204. Влад (25.11.2013 / 21:09)
Iznaur95 (25 Ноября 2013 / 20:57)
class Curl{

public function MyCurl($url, $userAgent, $cookieFile) { 
$ch = curl_init($url); 
curl_setopt($ch, CURLOPT_USERAGENT, $userAgent); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookieFile); 
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookieFile); 
$result = curl_exec($ch); 
curl_close($ch); 
return $result; 
}
}
E
вроде так же делал, но не пахало, лойс))

205. Николай (03.03.2015 / 19:10)
http://forumseo.org/threads/explorer-php-klass-dlja-raboty-s-kurlom.1854/

206. Reflesh (03.03.2015 / 19:32)
205. ritlen, ?

207. Николай (03.03.2015 / 19:44)
класс что просили выше)

208. php (21.04.2019 / 17:20)
Джентльмены, подскажите пжл почему этот код них@я не возвращает из БД? Лишь пустая страница, но без ошибок.

<?php

class DB
{
	public $db;
    public $result;
	public function connect()
	{
		$this->db = new PDO('mysql:host=localhost;dbname=magic', 'root', '');
	}

	public function getsql($sql) {

	$result = $this->db->prepare($sql);
	return $result->fetch(PDO::FETCH_OBJ);

	}

}

$a = new DB;
$a->connect();
$row = $a->getsql('SELECT * FROM articles');
echo $row->header;
echo $row->date;
?>

P.S. Я понимаю, что код не оптимален, поэтому просто укажите пжл на ошибку в коде, я что-то не догоню никак.

209. Dmitry Kokorin (22.04.2019 / 18:41)
php, почему бы не использовать конструктор вместо функции коннект? При инициализации класса будет создаваться соединение

Добавлено через 01:54 сек.
php, ну и наверное у тебя не одна запись в таблице, пройдись циклом или в запросе пропиши лимит 1

210. Вантуз-мен (22.04.2019 / 19:28)
php, а если коннектов будет несколько в разных местах и файлах?
будешь каждый раз соединение поднимать?

211. php (22.04.2019 / 23:06)
Dmitry Kokorin, хз написал слету не подумав) А запрос этот так, для теста написан.

Добавлено через 03:24 сек.
Вантуз-мен, ну да геморно. бг я об этом даже не думал. Сделаю как выше написали. Кстати, присвоить $db == null достаточно, чтобы закрыть соединение? Я помню, что для этого функция есть.

212. Вантуз-мен (22.04.2019 / 23:48)
php, да достаточно
https://php.net/manual/en/pdo.connections.php

213. php (23.04.2019 / 01:45)
Вантуз-мен, омг этот мануал я уже наизусть успел выучить.
Единственное в чем php мне не нравится, так это тем, что слишком много простора для изобретения велосипеда с нуля.
Я думаю, проще будет наследоваться от PDO и пользоваться его методами!

<?php

class DB
{
	public $db;
    public $result;
	public function connect()
	{
		$this->db = new PDO('mysql:host=localhost;dbname=magic', 'root', '');
	}

	public function getsql($sql) {

	$result = $this->db->prepare($sql);
	$stm->result->query($sql);

	return $stm->fetch(PDO::FETCH_OBJ);

	}
}
	$a = new DB;
	$a->connect();
	$a->getsql('SELECT * FROM articles');

?>

Добавлено через 02:53 сек.
Чуть-чуть дописал, однако мой код так и не заработал: Uncaught Error: Call to a member function query() on null in
Как я понимаю не соединилась или query пустой?
Интересно, что в процедурном то же самой писал за 10 мин и все работало. На ооп что-то...

214. KpuTuK (23.04.2019 / 09:13)
Откуда ты $stm взял??? Возвращается $result

215. php (23.04.2019 / 10:03)
KpuTuK, б@я, точняк! Спс за внимание.

216. ramzes (23.04.2019 / 11:07)
По хорошему надо 2 обьекта наследовать. Обьект запроса, и обект результата.
Типа PDO и PDOresult

217. KpuTuK (23.04.2019 / 11:39)
php, ide используй для разработки. Она бы подсказала. Есть netbeans например бесплатный

218. php (23.04.2019 / 14:49)
KpuTuK, у мя был, подтормаживал что-то. Нетбинс попробую

Добавлено через 03:33 сек.
ramzes, пожалуй. Еще бы реализовать это лаконично и с первого раза) Тем мне ооп и не нравится.

219. php (23.04.2019 / 15:51)
KpuTuK, все равно не катит: теперь ошибку выдает: "вызов неопределенного метода query". Все ништяк должно быть по идее.

220. ramzes (23.04.2019 / 16:19)
php, https://stackoverflow.com/questions/6195377/extend-mysqli-result по аналогии

221. KpuTuK (23.04.2019 / 19:00)
@KpuTuK, все равно не катит: теперь ошибку выдает: "вызов неопределенного метода query". Все ништяк должно быть по идее.
@php (Сегодня / 15:51)
естественно. ты подготовил запрос и теперь его нужно ВЫПОЛНИТЬ,
$result ->execute();

почитай внимательней про PDO https://www.php.net/manual/ru/class.pdo.php

222. Dmitry Kokorin (23.04.2019 / 20:00)
php, я использую MySQLi, но думаю не составит труда подправить, сильно расписывать не стану, дальше думай сам, суть я думаю ясна.
class Db {
	private $db = null, $sql, $db_count = null;
	public $test, $mest, $fest;
	public function __construct(){
		if(!$this->db){
			$this->db = new mysqli('localhost','test','pass*visavi','test');
			$this->db->set_charset('utf8');
		}
	}
	public function query($query = null){
		++$db_count;
		$this->sql = $this->db->query($query);
		if(!$this->sql) die($this->db->error);
		return $this->sql;
	}
}

$db = new Db;
$query = $db->query("SELECT ...");
while($data = $query->fetch_object()) var_dump($data);


223. php (23.04.2019 / 21:18)
KpuTuK, а, ну да) бг select выполнил execute() без параметров.
И все равно Fatal error: Uncaught Error: Call to undefined method PDOStatement::query() in blin

Добавлено через 00:48 сек.
Dmitry Kokorin, я бы еще __destruct() добавил, чтобы закрыть. Но я хочу сначала разобраться в своей ошибке.

Добавлено через 09:37 сек.
Dmitry Kokorin, кстати, твой класс рабочий, а мой нет oy

224. php (23.04.2019 / 21:35)
KpuTuK, да и зачем там execute()???

Вот мой же код:
require_once 'db_connect.php';

$sql = 'SELECT * FROM articles ORDER BY date DESC';
$query = $db->query($sql);

while ($row = $query->fetch(PDO:: FETCH_OBJ)) {
	
	echo "<h3>$row->header </h3>";
	echo "<p> Тема: $row->intro</p>";
	echo "<p>Автор статьи:<b><mark> $row->autor </mark></b></p>";
	echo "<a href='article.php?id=$row->id' title='$row->header'
	<button class='btn btn-warning mt-2 mb-2'>Читать</button> </a>";
}
все работает!! он там и не нужен, в мануале написано без параметров в select-запросах. Но я им никогда и не пользовался, если что-то прочитать из бд надо.

225. Dmitry Kokorin (23.04.2019 / 22:11)
php, я привел лишь пример, у меня все на много сложнее устроено, есть публичный метод RUN
// $query = $db->run(запрос для prepare, [параметры bind_param], [переменные для bind_result]);
$id = 4; // например нам нужно вытащить имена первых 3 юзеров
$query = $db->run("SELECT `name` FROM `members` WHERE `id` < ?", ['i', $id], [&$name]);
while($query->fetch()) var_dump($name);
// вася
// петя
// саша
$query->close();
сам метод RUN использует еще пару приватных методов

226. php (23.04.2019 / 22:56)
Dmitry Kokorin, ну вот я тоже хотел бы разделить на методы, и запускать каждый в зависимости от типа операции.
$query = $db->run("SELECT `name` FROM `members` WHERE `id` < ?", ['i', $id], [&$name]); - тут м.б. проще было бы циклом воспользоваться? Для универсальности. Правда я не вижу контекста, тебе виднее.

227. KpuTuK (23.04.2019 / 23:12)
@KpuTuK, да и зачем там execute()???

Вот мой же код: require_once 'db_connect.php';$sql = 'SELECT * FROM articles ORDER BY date DESC';$query = $db->query($sql);while ($row = $query->fetch(PDO:: FETCH_OBJ)) { echo "<h3>$row->header </h3>"; echo "<p> Тема: $row->intro</p>"; echo "<p>Автор статьи:<b><mark> $row->autor </mark></b></p>"; echo "<a href='article.php?id=$row->id' title='$row->header' <button class='btn btn-warning mt-2 mb-2'>Читать</button> </a>";}
все работает!! он там и не нужен, в мануале написано без параметров в select-запросах. Но я им никогда и не пользовался, если что-то прочитать из бд надо.
@php (Сегодня / 21:35)
я написал это исходя из 213 поста

228. php (23.04.2019 / 23:15)
KpuTuK, я о нем же.

229. Dmitry Kokorin (24.04.2019 / 07:38)
php, не догнал про цикл, куда и зачем?

230. php (24.04.2019 / 09:01)
Dmitry Kokorin, for (то-то, $X <int, то-то) {
run...} не покатит для твоих целей?

231. Dmitry Kokorin (24.04.2019 / 09:05)
php, какой смысл гонять запрос в цикле? Здесь один запрос, которым достаешь что угодно и сколько угодно записей
И вообще не понимаю людей которые гоняют запросы циклом, зачем делать несколько запросов если можно обойтись одним?

232. php (24.04.2019 / 13:46)
Dmitry Kokorin, я где-то видел код, где целесообразней было цикл использовать. Я и предложил.

233. php (24.04.2019 / 15:00)
Dmitry Kokorin, не знаешь случайно что за пометки или теги? @extends('layout')

@section('title')
Редактирование статьи
@stop

@section('content')
Никто точно так и не сказал. Эти, например из ротора.

234. Вантуз-мен (24.04.2019 / 18:01)
php, @extends('layout') означает что все что внутри секции content будет встроено (расширено) в этот шаблон layout.blade.php
@section('title') переопределяет заголовок в layout
и тд
грубо говоря вызывается layout в котором переопределен title и content

Добавлено через 04:17 сек.
Если капнешь чуть глубже layout это тоже не конечный шаблон, а некая прослойка, в которой происходит инициализация основных блоков страницы, в нем скрипты, стили, h1, счетчик, реклама, уведомления, меню итд
layout расширяет
@extends(setting('themes') . '/theme') тема которая у тебя включена
вот в ней уже основной код html

можно обойтись и без этой прослойки заменив @extends('layout') на @extends(setting('themes') . '/theme')
все вполне также будет работать, но не полноценно

235. php (24.04.2019 / 18:37)
Вантуз-мен, спс за инфу. Это синтаксис пхп? В мануале ничего такого нет.

236. Андрей (24.04.2019 / 18:57)
@Vantuz, спс за инфу. Это синтаксис пхп? В мануале ничего такого нет.
@php (Сегодня / 18:37)
это шаблонизатор блэйд же

237. Вантуз-мен (24.04.2019 / 20:22)
php, да как написали выше это шаблонизатор blade
https://laravel.com/docs/5.8/blade
русский перевод тоже можно найти

238. Dmitry Kokorin (26.04.2019 / 10:51)
php, в любом случае запрос в цикле не есть хорошо

Добавлено через 02:14 сек.
Я ещё понимаю собрать сам запрос в цикле, но не гонять запросы в бд циклом

239. php (26.04.2019 / 21:23)
Dmitry Kokorin, как например собрать запрос в цикле? В свитче?

240. Dmitry Kokorin (27.04.2019 / 09:16)
php,
$id_array = [1,2,3];
$ids = '';
foreach($id_array as $id) $ids .= $id.',';
$query = "SELECT `name` FROM `members` WHERE `id` = '".substr($ids, 0, -1));


241. ramzes (27.04.2019 / 13:37)
@php, $id_array = [1,2,3];$ids = '';foreach($id_array as $id) $ids .= $id.',';$query = "SELECT `name` FROM `members` WHERE `id` = '".substr($ids, 0, -1));
@DimmoS (Сегодня / 09:16)
$query = "SELECT `name` FROM `members` WHERE `id` IN('".implode(',' , $id_array)););
@DimmoS, как например собрать запрос в цикле? В свитче?
@php (Вчера / 21:23)
в 90% случаев цикл не нужен, это крайне редко когда реально оправданно

242. php (27.04.2019 / 15:11)
Ясно, спс за инфу. Я тоже, кстати, ни в одной книге или программе никода не видел sql-запросов в циклах.

243. Андрей (27.04.2019 / 15:51)
Ясно, спс за инфу. Я тоже, кстати, ни в одной книге или программе никода не видел sql-запросов в циклах.
@php (Сегодня / 15:11)
дак это тип просто логично

244. php (27.04.2019 / 16:55)
Андрей, кому как)

245. php (28.04.2019 / 21:57)
ramzes, у тебя там ошибка: после первой открывающей скобки лишний апостроф и ; для чего-то дважды воткнул.

246. ramzes (29.04.2019 / 01:52)
php, просто не мой код, модифицировал на скорую руку, не вглядываясь

247. Dmitry Kokorin (29.04.2019 / 12:35)
ramzes, он попросил пример цикла, я написал

248. JiGaN (29.04.2019 / 21:38)
Ребята, нахрена php интерфейсы?

249. php (29.04.2019 / 22:37)
Ребята, нахрена php интерфейсы?
@JiGaN (Сегодня / 21:38)
Будет не понятно, если не углублялся в принципы ооп, но если в кратце, то дает возможность не связанным между собой классам работать с одними и теми же типами объектов.
Лучше с основ начать, либо все равно непонятно будет.

250. JiGaN (30.04.2019 / 05:57)
Будет не понятно, если не углублялся в принципы ооп, но если в кратце, то дает возможность не связанным между собой классам работать с одними и теми же типами объектов.
Лучше с основ начать, либо все равно непонятно будет.
@php (Вчера / 22:37)
Ну вот, если я создам интерфейс, опишу функционал и реализую его в классе, а затем просто снесу нафиг интерфейс, скрипт от этого не поломается, как например в c# или python, поэтому и вопрос нахрена пхп интерфейс?

251. KpuTuK (30.04.2019 / 08:28)
JiGaN, погугли PSR. Наглядное пособие

252. php (30.04.2019 / 14:16)
Ну вот, если я создам интерфейс, опишу функционал и реализую его в классе, а затем просто снесу нафиг интерфейс, скрипт от этого не поломается, как например в c# или python, поэтому и вопрос нахрена пхп интерфейс?
@JiGaN (Сегодня / 05:57)
Тогда твой класс потеряет функционал, который определен в интерфейсе.

Добавлено через 04:04 сек.
JiGaN, у интерфейса не тривиальная задача, как может показаться на первый взгляд. Это можно понять только при углубленном изучении ооп.

253. Вантуз-мен (30.04.2019 / 16:40)
Есть такой принцип SOLID https://ru.wikipedia.org/wiki/Принцип_инверсии_зависимостей
https://habr.com/ru/post/313796/
который говорит что
Модули верхних уровней не должны зависеть от модулей нижних уровней. Оба типа модулей должны зависеть от абстракций.
Абстракции не должны зависеть от деталей. Детали должны зависеть от абстракций.

Так вот в качестве абстракции вполне можно иметь ввиду интерфейс

254. JiGaN (01.05.2019 / 12:26)
@JiGaN, погугли PSR. Наглядное пособие
@KpuTuK (Вчера / 08:28)
Это всего лишь гуид стайл и рекомендации, но не панацея

Добавлено через 07:22 сек.
@JiGaN, погугли PSR. Наглядное пособие
@KpuTuK (Вчера / 08:28)
Это всего лишь гуид стайл и рекомендации, но не панацея
Есть такой принцип SOLID https://ru.wikipedia.org/wiki/Принцип_инверсии_зависимостей
https://habr.com/ru/post/313796/
который говорит что
Модули верхних уровней не должны зависеть от модулей нижних уровней. Оба типа модулей должны зависеть от абстракций.
Абстракции не должны зависеть от деталей. Детали должны зависеть от абстракций.

Так вот в качестве абстракции вполне можно иметь ввиду интерфейс
@Vantuz (Вчера / 16:40)
Ну допустим, но ведь это не обязательно интерфейс, и даже сама абстракция в ооп.

255. KpuTuK (01.05.2019 / 13:24)
JiGaN, это тебе пример применения

256. php (01.05.2019 / 16:51)
JiGaN, лол это и была панацея, общая информация, которая применима не только к php ооп. Я думаю, что тебе стоит для начала разобраться с терминологией.

257. Вантуз-мен (01.05.2019 / 17:55)
JiGaN, один из принципов php это полиморфизм, вот как раз на основе его можно объяснить для чего нужны абстрактные классы или интерфейсы, представь что у тебя есть класс Comment и в нем метод, который принимает объект другого класса, это может быть комментарий новости , статьи итд, и в методе нельзя указать какой-то конкретный класс, но можно указать абстрактный от которого наследуются все модели новостей , статей или интерфейс, который они реализуют

Добавлено через 03:09 сек.
Да , конечно , ты прав, можно вообще не использовать ООП , работать только с функциями , но тогда не будет гибкости, или например не указывать имя класса вообще, вроде в 7.3 появился тип object, тогда не понятно будет что это за объект , какого класса, какие методы он содержит итд

258. php (01.05.2019 / 19:10)


259. JiGaN (01.05.2019 / 19:42)
@JiGaN, один из принципов php это полиморфизм, вот как раз на основе его можно объяснить для чего нужны абстрактные классы или интерфейсы, представь что у тебя есть класс Comment и в нем метод, который принимает объект другого класса, это может быть комментарий новости , статьи итд, и в методе нельзя указать какой-то конкретный класс, но можно указать абстрактный от которого наследуются все модели новостей , статей или интерфейс, который они реализуют

Добавлено через 03:09 сек.
Да , конечно , ты прав, можно вообще не использовать ООП , работать только с функциями , но тогда не будет гибкости, или например не указывать имя класса вообще, вроде в 7.3 появился тип object, тогда не понятно будет что это за объект , какого класса, какие методы он содержит итд
@Vantuz (Сегодня / 17:55)

Спасибо за уделенное время, я стараюсь писать в ооп стиле, работал и с ларавел и с yii, начинал с codeigniter(для начало самое то фрейм, жалко не обновляется, который год неймспейсы обещают)
Стараюсь придерживаться как минимум стандартов фреймворка, ну и по рекомендации zend code style, пишу крупные проекты по работе, могу написать абсалютно любую вещь на пыхе, и пока еще ниразу не спалился, что я МЛИН теорию знаю совершенно хреного. Мне повезло что при поступлении на работу мне тупо дали задание и небольшое тз, была бы это теория то баам и фиаско.
Вообщем то минута откровений истекла))
Про книги говорить думаю не стоит, я и так много читаю, но мало что оседает с нужным пониманием в голове.

Добавлено через 06:51 сек.
да и про unit тесты отдельно спрашивать? Такой вопрос возник, как вы модели тестируете? Те которые в базу запросы шлют, надо-ли создавать отдельные тестовые таблицы, или достаточно в мок инициализировать датабейс обработчик? Как вообщем-то вы используете это напрактике?

260. Вантуз-мен (01.05.2019 / 21:07)
Если ты тестируешь именно сохранение создание, изменение записи , то конечно надо прямо работать с бд, но естественно в транзакции, чтобы потом не осталось мусора,
А если тебе нужно протестировать метод который что-то делает с данными и использует записи из бд, вот тут можно и подменит эти записи

261. php (02.05.2019 / 18:09)
class Person {
	public $name;
	function __construct($name) {
		$this->name = $name;
	}
}

interface Module {
	function execute();
}

class FtpModule implements Module {
	function setHost($host) {
		print("
			FtpModule::setHost():$host\n");
	}

function execute() {}
}
Помогите пжл разобраться с кодом.
Класс или методы небыли объявлены статическими, но методы можно вызывать через :: и никаких ошибок, интересно знать почему? При этом после вызова метода FtpModule::setHost():$host, идет параметр $host через двоеточие, если это установка параметра, тогда почему через двоеточие, а не в скобках как положено?

262. Вантуз-мен (02.05.2019 / 22:14)
Там никакого вызова функции нет, ты просто печатаешь строку

263. php (02.05.2019 / 22:31)
Вантуз-мен, в чем тогда смысл кода интересно... кстати на экран все равно ничего не выводится.

264. Вантуз-мен (03.05.2019 / 00:26)
php, не в курсе какой смысл заложили в сие творение
(new FtpModule())->setHost('visavi.net');

265. php (03.05.2019 / 18:29)


266. JiGaN (03.05.2019 / 19:51)
class Person { public $name; function __construct($name) { $this->name = $name; }}interface Module { function execute();}class FtpModule implements Module { function setHost($host) { print(" FtpModule::setHost():$host\n"); }function execute() {}}
Помогите пжл разобраться с кодом.
Класс или методы небыли объявлены статическими, но методы можно вызывать через :: и никаких ошибок, интересно знать почему? При этом после вызова метода FtpModule::setHost():$host, идет параметр $host через двоеточие, если это установка параметра, тогда почему через двоеточие, а не в скобках как положено?
@php (Вчера / 18:09)

Дело не в том что они не статические, ты можешь обращаться к свойствам метода или методу из того же метода ::, либо вместо метода обращаться через self:: , это же ооп бро, парадигмы и все такое))

267. php (03.05.2019 / 20:32)
JiGaN, из невнимательности последний пост написал. Под вечер башка уже не хотела соображать)

268. php (04.05.2019 / 02:56)
Этот код:
class A {
public static function getInstance()
    {
        if (!(self::$instance instanceof self)) {
            self::$instance = new self();
        }
        return self::$instance;
    }
}
будет эквивалентен этому:
class A {
public static function getInstance()
    {
        if (!(self::$instance instanceof self)) {
            return new static();
        }
    }
}
??

269. php (03.10.2019 / 03:44)
Добрый вечер, как-то открыл документацию "ларавэл" и, нашел там запись вроде этой:
Route::get('example', function() {
return view('example')->with('name', 'laravel');
});
Что она делает я знаю, не понятен механизм действия записи после return; view - это функция же, а не объект; зачем там стрелка после нее, куда она обращается, не подскажите?

270. Дмитрий (03.10.2019 / 09:39)
php, view() в данном случае это хелпер, который дублирует действие объекта View() и, собственно, его и возвращает, поэтому можете по цепочке продолжить действия с этим хелпером как с объектом View().

В Laravel полно таких хелперов: trans(), auth() и пр. и пр....

271. php (03.10.2019 / 13:31)
Дмитрий, класс! годный инструмент этот ларавэл) "под капотом" не знай как это все происходит?

272. JustZero (03.10.2019 / 14:23)
php, читать документацию или использовать обычные классы ?

Юзать какой то шторм с ide-helper пакетом?

273. Дмитрий (03.10.2019 / 14:31)
php, На самом деле, ничего сложного. Правда, придется перечитать тонны документации и статей.
https://laravel.ru/docs/v5
https://laravel.com/docs/
http://laravel.su
https://www.youtube.com/watch?v=nWo5vHkOyBk&list=PL9ogRqeIEMzntnGiOj0tHu0o2ldxWWtJR

274. JustZero (03.10.2019 / 17:18)
orchid.software прикольный инструмент для создания админки

275. ramzes (03.10.2019 / 18:58)
Дмитрий, читать не писать, всегда проще)
Хотя и не модно😂

276. Дмитрий (03.10.2019 / 19:42)
ramzes, поверь, я все вышеперечисленное прочитал и посмотрел. Даже больше D Не хвастаюсь, просто констатирую факт.

277. php (04.10.2019 / 00:53)
JustZero, я не понял твоего вопроса

Добавлено через 05:32 сек.
Дмитрий, по-моему laravel.su для глубокого изучения не годится, только как справочник; именно с него я и попал на форум. Вообще нормальной документации (желательно на русском языке) я еще не видел; книг тоже нет

278. php (08.10.2019 / 00:44)
Дмитрий, у тебя есть ссылка на целый курс ларавел, который на ютубе?

279. Дмитрий (09.10.2019 / 12:41)
php, я выше писал

280. php (10.10.2019 / 16:52)
Дмитрий, там только одно занятие, на канале больше видосов нет; там доступ по ссылке на каждый видос.

281. Дмитрий (10.10.2019 / 22:25)
php, https://www.youtube.com/watch?v=nWo5vHkOyBk&list=PL9ogRqeIEMzntnGiOj0tHu0o2ldxWWtJR
Это первое видео из плейлиста. Всего их там 100 видео. Человек рассказывает очень просто и доступно, но ОЧЕНЬ подробно. Перематывать не советую, т.к. в любую сукунду он может сказать очень важную вещь. Это очень хороший курс по Laravel на Ютьюбе.

282. php (11.10.2019 / 00:16)
Дмитрий, о, ништяк! Благодарю за помощь)

283. Андрей (21.11.2021 / 19:02)
Добрый день! Помогите пожалуйста разобраться с кодом. Ниже представлен код. его часть. Собственно тут идет проверка на существование юзера в базе. Но есть еще системные сообщения на которые ругается что адресата не существует. Как его проверить? Зовут его $config['nicksys'])

        case 'dialog':
            show_title('Диалог с '.$uz);

				$queryuser = DB::run() -> querySingle("SELECT `users_id` FROM `users` WHERE `users_login`=? LIMIT 1;", array($uz));
            if (!empty($queryuser)) {

Тут содержимое

             } else {
                show_error('Ошибка! Данного адресата не существует!');
            }
            break;


284. Pypcb (21.11.2021 / 22:14)
Андрей, добавить в запрос условие выборки WHERE ‘users_login’ = ? AND ‘users_login’ != $config['nicksys']

285. Андрей (21.11.2021 / 22:49)
Pypcb, не работает. Может есть умельцы которые напишут качественный диалог как на 10 роторе. Только под 3-й ротор?

286. Вантуз-мен (21.11.2021 / 23:39)
Андрей, if (!empty($queryuser) && $uz !== $config['nicksys']) {

287. Андрей (22.11.2021 / 00:45)
Вантуз-мен, не работает. Может из-за того что передается ссылка в кириллице? ...pages/privat.php?act=dialog&uz=%D0%A1%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D0%BD%D0%BE%D0%B5%20%D1%81%D0%BE%D0%BE%D0%B1%D1%89%D0%B5%D0%BD%D0%B8%D0%B5

Добавлено через 09:30 сек.
Нет, поменял на латиницу. То же самое.

288. JustZero (22.11.2021 / 03:05)
Андрей, if (!empty($queryuser) && $uz !== $config['nicksys']) {
@Vantuz Вчера / 23:39
|| вместо && и uz == config

289. Андрей (22.11.2021 / 07:43)
JustZero, спасибо! Точно! 3 года сайт не трогал..

URL: https://visavi.net/topics/18095