PHP.SU

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

Страниц (98): [1] 2 3 4 5 6 7 8 9 ... » В конец

> Найдено сообщений: 1465
teddy Отправлено: 11 Января, 2017 - 20:44:15 • Тема: подключение к сокету • Форум: Вопросы новичков

Ответов: 9
Просмотров: 834
Очень просто различает. Обмен данными происходит по сети. Клиент обращаясь на сервер занимает определенный порт(если не задан явно, ОС выделит один из свободных портов для клиента). Айпи клиента и порт который он занял когда соединялся с сервером и есть точка обратной связи сервера с клиентом. Но все это прозрачно для программиста, он работает лишь с дескриптором сокета своих клиентов.
teddy Отправлено: 18 Декабря, 2016 - 18:18:23 • Тема: new SplFixedArray как добавить в??? • Форум: Вопросы новичков

Ответов: 3
Просмотров: 840
Если объект уже создан, то не выйдет. Но при создании объекта есть возможность сразу инициализировать его несколькими элементами.
PHP:
скопировать код в буфер обмена
  1.  
  2. $data = ['a', 1, new stdclass];
  3. $fixed = \SplFixedArray::fromArray($data);
  4. var_dump($fixed);
  5.  

Если хочется снова добавить пачку, присобачить к уже созданному SplFixedArray, можно так:
PHP:
скопировать код в буфер обмена
  1.  
  2. $newFixed = \SplFixedArray::fromArray(array_merge($fixed->toArray(), [1,2,3]));
  3.  

Но этот класс нужен для улучшения производительности(скорость, более экономное потребление памяти на больших данных), а такими финтами вы скорее потеряете чем выйграете, если конечно вы не сохраняете этот объект где нибудь для использования его в последующих запросах без подобных финтов.
teddy Отправлено: 11 Ноября, 2016 - 16:19:47 • Тема: SOAP разное поведение на сервере и локалке • Форум: Вопросы новичков

Ответов: 6
Просмотров: 447
Адрес службы в данный момент не доступен для чтения WSDL. В ответ возвращается 403. А значит, сервис недоступен (выходит проблема на стороне сервера веб службы).
По умолчанию PHP кеширует WSDL, что бы каждый раз не лазить за одним и тем же документом, который как правило редко меняется на стороне сервера службы.
Скорее всего, когда вы обращались к удаленному сервису локально, сервис всё ещё был доступен.
Соответственно WSDL был закеширован, в связи с этим __getFunctions проанализировав структуру документа из кеша выдает вам результат, и ошибок не видно.

Попробуйте на локалке до создания клиента написать ini_set('soap.wsdl_cache_enabled', 0);
После запуска скрипта должно вывестись сообщение об ошибке, так как WSDL не будет прочитан из кеша, вместо этого PHP попытается загрузить документ по url службы и поймает 403 в ответ.
(Добавление)
Или там тупо ограничение по айпи
teddy Отправлено: 11 Ноября, 2016 - 11:02:16 • Тема: PHP-программист, Москва, от 115 000 руб. • Форум: Работа

Ответов: 5
Просмотров: 987
Цитата:
CMS и фреймворки - зло.

Сейчас вас начнут бить Улыбка
teddy Отправлено: 27 Октября, 2016 - 13:59:49 • Тема: Что делаю не так php soket • Форум: Вопросы новичков

Ответов: 3
Просмотров: 455
Цитата:
есть одно НО - подключится может только 1 пользователь, хотя в socket_listen прописано 10.

Ну и что написано. Это вовсе не означает, что эта десятка будет обрабатываться вне очереди. Если количество соединений более чем 1, тогда эти соединения будут обрабатываться по очереди. В вашем случае после принятия соединения запускается бесконечный цикл который обрабатывает это соединение. Ввиду этого первое соединение не покидает очередь и остальные "ребята" не могут "работать". Если вы будете использовать блокирующие операции при обработки соединений, то никакие socket_select-ы тут не помогут, потому что обработка соединений происходит в одном потоке.
teddy Отправлено: 11 Октября, 2016 - 17:31:38 • Тема: Подключиться ко 2-ой бд при отказе 1-ой • Форум: Работа с СУБД

Ответов: 17
Просмотров: 1484
По мне нормально это когда:
Один писатель
Много читателей
Упал писатель? Специальный инстанс определяет нового писателя среди читателей
Проснувшийся писатель становится читателем
teddy Отправлено: 24 Августа, 2016 - 20:26:13 • Тема: Exception Где виновный. • Форум: Вопросы новичков

Ответов: 3
Просмотров: 412
Как понимать "при каком вызове"? Что именно интересует?
Если количество вызовов - то завести статичную переменную в функции и инкрементить её при каждом вызове и передавать значение через объект который описывает исключение. Так же можно передавать и другие параметры. Как то так

PHP:
скопировать код в буфер обмена
  1. class ArgsCapableException extends Exception
  2. {
  3.     private $args;
  4.    
  5.     public function setArgs(array $args)
  6.     {
  7.         $this->args = $args;
  8.     }
  9.    
  10.     public function getArgs()
  11.     {
  12.         return $this->args;
  13.     }
  14. }
  15.  
  16. function sum($a, $b)
  17. {
  18.     static $callCount = 0;
  19.     ++$callCount;
  20.        
  21.     $sumResult = $a + $b;
  22.    
  23.     if ($sumResult > 10) {
  24.         $exception = new ArgsCapableException('Message...');
  25.         $exception->setArgs(compact('a', 'b', 'callCount'));
  26.         throw $exception;    
  27.     }
  28.        
  29.     return $sumResult;
  30.  
  31. }
  32.  
  33. try {
  34.     $s1 = sum(2,2);
  35.     $s2 = sum(5,6);
  36. } catch (ArgsCapableException $e) {
  37.     var_dump($e->getMessage(), $e->getArgs());
  38. }
teddy Отправлено: 25 Апреля, 2016 - 00:29:53 • Тема: PHP 7 Использование контроля скалярных типов • Форум: Объектно-ориентированное программирование

Ответов: 28
Просмотров: 3027
Prizma пишет:
т.е. реализовать класс class productList implements Iterator для этого дела?

В вашем случае проще всего использовать PDOStatement который и так Traversable с соответствующим типом fetch-а. Если создаете и заполняете экземпляр самостоятельно самый простой вариант это задействовать Generator
teddy Отправлено: 24 Апреля, 2016 - 17:16:39 • Тема: PHP 7 Использование контроля скалярных типов • Форум: Объектно-ориентированное программирование

Ответов: 28
Просмотров: 3027
LIME
Приблизительно об этом я и говорил, о классе, экземпляры которого представляют определенный тип связанный с данными, которые подвергаются CRUD-у.
Может класс на предыдущей страничке был немного скудным, поэтому появились вопросы. Вот более ясный пример использования

PHP:
скопировать код в буфер обмена
  1. //пример использования #1
  2. $products = $storage->getList();//получили список объектов типа Product
  3. //пример #2. insert и update
  4. $product->setName($name);
  5. $product->setPrice($price);
  6. $storage->save($product);


Таким образом получаем унифицированный интерфейс обращения с продуктом и наличие соответствующего типа в коде а так же возможность локализировать некоторые стандартные вычисления(если они есть) в методах этого типа вместо того что бы дублировать их везде где используется product
(Добавление)
Prizma пишет:
По реализации заполнения классов у меня появилось 2 варианта

Так у вас будет 2 цикла. Один заполнение массива, другой - для вывода данных из этого массива(через объекты которые в этом массиве). Тут явно напрашивается Traversable.
teddy Отправлено: 24 Апреля, 2016 - 12:53:50 • Тема: PHP 7 Использование контроля скалярных типов • Форум: Объектно-ориентированное программирование

Ответов: 28
Просмотров: 3027
Prizma пишет:
Есть другие способы более элегантные, по реализации.

Есть, но их объяснение может привести к нескольким простыням текста и столько же текста для того что бы ответить на ваши вопросы. Если бы вы их знали не задавали такие вопросы, по этому не нужно ля-ля... Улыбка
Prizma пишет:
Код становится менее понятным и в случае нагруженности set, менее предсказуемым

Как уже говорил, в данном случае мы лишь помогаем PDO сделать свою работу. Такая реализация была предложена исходя из логики, что вы делаете проект, а изучать подробности "академической" реализации это долго. И это решение в 100 раз лучше чем то с чем вы пришли на форум создавая эту тему
Prizma пишет:
Сколько я в своей практике не использовал __set рано или поздно приходил, к тому, что эту часть кода приходилось переписывать, либо постоянно модифицировать.

А я вот не помню что бы мне приходилось это делать. Наверное не там применяли
Prizma пишет:
IDE не сможет тебе помогать

Радость

Вот LIME увидел реальную проблему, она есть и это не единственная проблема если докопаться с точки зрения ООП.
Об этом много писать. Не хочу, правда. Опять же, если не понятна суть примера, см ещё раз ответ на вторую цитату в этом посте...
teddy Отправлено: 24 Апреля, 2016 - 01:28:02 • Тема: PHP 7 Использование контроля скалярных типов • Форум: Объектно-ориентированное программирование

Ответов: 28
Просмотров: 3027
Prizma пишет:
однако магические методы точно использовать не хорошо..

Это кто сказал? Причины в студию, пруф, что это всегда зло. Нужно использовать, но с умом. А вообще выстрелить в ногу можно всякими инструментами, даже полезными, если разработчик плохо понимает с чем имеет дело.

Prizma пишет:
Этот код не полный там не хватает наверно execute... чтобы он работал

Конкретно в этом примере execute не нужен.

LIME пишет:
теди не слушай
Он ошибается

Я прекрасно понимаю причины твоих возражений касательно __set и отчасти ты прав, НО:

По поводу "Сетеры это лишнее знание для клиентского кода", в данном случае это очень удобно. Но да, остается возможность переопределить значение "прямым" обращением, инкапсуляция и все такое... Эту возможность можно "прикрыть" простой проверкой в __set.
Если исходить из логики, что __set предназначен для PDO, можно проверить, если свойство пустое, то пускать на запись, значит пишет PDO а не кто то в клиентском коде. Но если значение конкретному свойству уже присвоено, бросать исключение, значит это пытается сделать не PDO. Все просто. И простоту реализации сохранили, и такие знания у клиентского кода отняли.
teddy Отправлено: 23 Апреля, 2016 - 12:36:33 • Тема: PHP 7 Использование контроля скалярных типов • Форум: Объектно-ориентированное программирование

Ответов: 28
Просмотров: 3027
LIME
Может мы по разному позиционируем этот вопрос. На мой взгляд это не модель, а то, что возвращает модель, то есть результат работы модели. Например, $productsModel->getList($offset, $limit), вернет какой то результат, если данные нашлись. А в какой форме она вернет результат, например в виде массива, объекта/набора объектов или что то ещё уже дело десятое и это решает разработчик в зависимости от того, что ему нужно и удобно. Конечный результат работы модели не является моделью, не является тем самым комбайном, который обращается в определенное хранилище за данными. Имхо... Как то так Подмигивание
teddy Отправлено: 23 Апреля, 2016 - 12:17:37 • Тема: PHP 7 Использование контроля скалярных типов • Форум: Объектно-ориентированное программирование

Ответов: 28
Просмотров: 3027
LIME
А где ты здесь увидел модель? Улыбка В данном случае экземпляр класса Product сущность, представляющая определенный тип в коде. У продукта есть название, цена и что то ещё. Этот продукт или набор продуктов в виде итератора/массива уже возвращает модель(возможно, какая нибудь ORM) как результирующий набор.
teddy Отправлено: 23 Апреля, 2016 - 12:03:49 • Тема: PHP 7 Использование контроля скалярных типов • Форум: Объектно-ориентированное программирование

Ответов: 28
Просмотров: 3027
Мелкий пишет:
В каждом (каждом!) PHP-файле.

Ну, это не всегда обязательно. В некоторых случаях достаточно определить строгий тип только в том файле, где инклюдится другой. Зависит от стека вызовов.

LIME пишет:
Как бэ да но какбэ нет смещения данных и значит н кушается память

Не, я не про экономию памяти говорил а лишь обратил внимание на тот факт, что экземпляр создается в любом случае, об этом свидетельствует вызов конструктора.

LIME пишет:
Все эти геты и сеты не более чем латание дыр

Почему латание дыр? В данном случае PDO пытается присвоить значения публичным свойствам одноименным с полями в БД соответствующие значения потому что был использован FETCH_CLASS. Когда он это делает, не находит такие свойства т.к они приватные и вызывается __set. Сами мы явно магию никак не используем. Не сторонник публичных свойств, но их любителям __set можно и не писать, PDO сам все сделает.

LIME пишет:
Запрос в клиентском коде? Ну для примера наверное...

Ну да, это был пример того, что хочет ТС, в более простой форме.
teddy Отправлено: 22 Апреля, 2016 - 20:49:19 • Тема: PHP 7 Использование контроля скалярных типов • Форум: Объектно-ориентированное программирование

Ответов: 28
Просмотров: 3027
Prizma пишет:
этого мало?


В самом начале исполнения.

Prizma пишет:
Это опечатка, естественно я имел ввиду, что он будет статичный.

Ну и что Улыбка Смотрите. У вас так получается 2 запроса. Один с проверкой на существование, другой для получения продукта если он существует. Почему не выберете сразу продукт, вне класса Product, и если результатом будет не false, тогда работать дальше? Присмотритесь к примеру выше.

Prizma пишет:
добавил код трейта Mysql, может еще какие ошибки увидите))

Ну как минимум 3 косяка.
1. Отсутствие возможности определения параметров подключения динамически (нужно передавать их из вне)
2. Синглтон... Статика... жесткие связи в коде, сложно тестируемый код
3. Трейты нельзя протестировать как отдельное целое

Вообщем говорить об ошибках в данном случае можно не мало, если хотите понять ООП, изучайте фреймворки, читайте сурьезные статьи на эту тему Улыбка Как вариант можете попробовать с S.O.L.I.D как было предложено выше. Из ФВ рекомендую Zend Framework 2

Но придется попотеть))

Страниц (98): [1] 2 3 4 5 6 7 8 9 ... » В конец
Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB