PHP.SU

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

Страниц (31): В начало « ... 2 3 4 5 [6] 7 8 9 10 ... » В конец

> Найдено сообщений: 463
Prizma Отправлено: 22 Апреля, 2016 - 20:01:22 • Тема: PHP 7 Использование контроля скалярных типов • Форум: Объектно-ориентированное программирование

Ответов: 28
Просмотров: 4537
LIME пишет:
И какая выгода использовать typehint?
LIME пишет:
Typehint надо использовать в классах использующих эти данные
Там будет уместно

логично, тогда и вправду не нужно приводить тип
LIME пишет:
А еще есть extract()

IDE будет ругаться, если бд не прикручена
LIME пишет:
Лучше завести класс работающий с хранилищем
Тогда для смены хранилища не придется менять класс модели
Принцип open/close SOLID

а вот тут можно поподробнее.
Не совсем понял, чем плох этот класс в роли хранилища?
(Добавление)
teddy пишет:
1. При включении строгого режима получите ошибку из за попытки передать в качестве параметра строку похожую на число для int параметра.

у меня включен строгий режим, нет ошибок.
teddy пишет:
Ниже приведу более простую реализацию, для новичка в таких делах вполне сойдет.
Я несколько лет занимаюсь php, могу сказать, что у меня не было наставника и я изучал язык сам и чувствую свои пробелы. Но реализация в примере меня не как не устраивает.

Я хочу, чтобы экземпляр класса Product было невозможно создать, если продукт в базе не найден. Класс реализует метод для проверки существования такого продукта, которым и нужно воспользоваться перед созданием экземпляра класса. Если продукта не существует в базе, будет фатальная ошибка, а следовательно где то в коде ошибка, которую будет легко найти и исправить.

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

Просто проект не из одного файла состоит и хочется сделать универсальный класс под хранение информации об одном объекте
Prizma Отправлено: 22 Апреля, 2016 - 17:01:21 • Тема: PHP 7 Использование контроля скалярных типов • Форум: Объектно-ориентированное программирование

Ответов: 28
Просмотров: 4537
И так есть класс Product экземпляр которого создается по product_id.

Задумка такая.. Использовать возможности PHP 7, а именно поддержку контроля скалярных типов данных, при выборке из бд, для приведения всех полей к нужному типу.

Вот как это получилось у меня:
PHP:
скопировать код в буфер обмена
  1. namespace Core\Market\Products;
  2.  
  3. use Core\DataBase\Mysql;
  4. use Core\Market\System\Constants\MTables;
  5.  
  6. class Product
  7. {
  8.     use Mysql;
  9.  
  10.     private $id;
  11.     private $producerId;
  12.     private $authorId;
  13.     private $currencyId;
  14.     private $price;
  15.     private $inStockAmount;
  16.     private $name;
  17.     private $deliveryDays;
  18.     private $shortDesc;
  19.     private $seoDesc;
  20.     private $seoKw;
  21.     private $created;
  22.     private $modified;
  23.     private $objProperties;
  24.  
  25.     public function __construct(int $productId)
  26.     {
  27.         $sql = 'SELECT producer_id, author_id, currency_id, price, in_stock_amount, delivery_days, name, short_desc, '.
  28.             'seo_desc, seo_kw, created, modified, obj_properties FROM '.MTables::PRODUCTS.' WHERE id = '.$productId;
  29.         $q = self::db()->prepare($sql);
  30.         $q->execute();
  31.         if($r = $q->fetch(\PDO::FETCH_NUM)) {
  32.             $this->id = $productId;
  33.             list($p1,$p2,$p3,$p4,$p5,$p6,$p7,$p8,$p9,$p10,$p11,$p12,$p13) = $r;
  34.             $this->setParams($p1,$p2,$p3,$p4,$p5,$p6,$p7,$p8,$p9,$p10,$p11,$p12,$p13);
  35.         }else{
  36.             throw new \Exception('product '.$productId.' was not found');
  37.         }
  38.     }
  39.  
  40.     private function setParams(int $producerId, int $authorId, int $currnecyId, float $price, int $inStockAmount,
  41.                                int $deliveryDays, string $name, string $shortDesc, string $seoDesc, string $seoKw,
  42.                                int $created, int $modified, int $objProperties)
  43.     {
  44.         $this->producerId = $producerId;
  45.         $this->authorId = $authorId;
  46.         $this->currencyId = $currnecyId;
  47.         $this->price = $price;
  48.         $this->inStockAmount = $inStockAmount;
  49.         $this->deliveryDays = $deliveryDays;
  50.         $this->name = $name;
  51.         $this->shortDesc = $shortDesc;
  52.         $this->seoDesc = $seoDesc;
  53.         $this->seoKw = $seoKw;
  54.         $this->created = $created;
  55.         $this->modified = $modified;
  56.         $this->objProperties = $objProperties;
  57.     }
  58.  
  59.     static public function issetProduct(int $productId)
  60.     {
  61.         $q = self::db()->prepare('SELECT COUNT(*) as rows FROM '.MTables::PRODUCTS.' WHERE `id` = '.$productId);
  62.         $q->execute();
  63.         $r = $q->fetch(\PDO::FETCH_ASSOC);
  64.         return ($r['rows'] > 0);
  65.     }
  66. }

класс Mysql:
PHP:
скопировать код в буфер обмена
  1. namespace Core\DataBase;
  2.  
  3.  
  4. use PDO;
  5.  
  6. trait Mysql
  7. {
  8.     static private $db_driver = 'mysql';
  9.     static private $db_host = 'localhost';
  10.  
  11.     static private $db_user = 'root';
  12.     static private $db_password = '';
  13.     static private $db_name = 'db_name';
  14.     static private $db_setting = array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES "utf8"');
  15.  
  16.     static private $db;
  17.  
  18.     /**
  19.      * @return PDO
  20.      */
  21.     static protected function db()
  22.     {
  23.         if(is_null(self::$db)) {
  24.             try {
  25.                 self::$db = new PDO(self::$db_driver . ':host=' . self::$db_host . ';dbname=' . self::$db_name, self::$db_user, self::$db_password, self::$db_setting);
  26.             } catch (\Exception $e) {
  27.                 die('Fail connection to database');
  28.             }
  29.         }
  30.         return self::$db;
  31.     }
  32. }
  33.  

Что вы думаете о такой реализации, уважаемые профи?
Prizma Отправлено: 14 Апреля, 2016 - 18:56:48 • Тема: Как лучше организовать классы • Форум: Вопросы новичков

Ответов: 4
Просмотров: 251
armancho7777777 пишет:
Мэт Зандстра "PHP. Объекты, шаблоны и методики программирования"
Стр. 332

скачал книжку, обязательно вечерком посмотрю
Prizma Отправлено: 13 Апреля, 2016 - 06:37:22 • Тема: Как лучше организовать классы • Форум: Вопросы новичков

Ответов: 4
Просмотров: 251
T1grOK пишет:
Вы переизобретаете Identity Map.

спасибо за наводку...
(Добавление)
Попытался найти реализацию шаблона.. https://github[dot]com/dflydev/repose-php

Стоит ли взять готовую? или этот шаблон для написания именно своей реализации, просто примеров не нашел
Prizma Отправлено: 12 Апреля, 2016 - 13:50:16 • Тема: Как лучше организовать классы • Форум: Вопросы новичков

Ответов: 4
Просмотров: 251
Добрый день,
описываю ситуацию:
есть класс Product, который содержит всю информацию о товаре. Так же есть куча других классов, которые его используют. При создании экземпляра класса Product используется id товара, по которому из бд грузится инфа в класс.

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

Мне пришло в голову решение создать еще один класс ProductBase со статической переменной products (@var Product[]) и методов getProduct() (@return Product), который в случае, если экземпляр этого продукта был уже создан возвращал его из переменной products, иначе создавал такой экземпляр и сохранял его в эту самую переменную.

Мне такое решение не нравится, и уверен, что умные люди давно придумали более красивых выход из данной ситуации. Не подскажите мне его?

Надеюсь, предложенные решения не будут связаны с мемкешом, редисом и др. подобными бд. Интересует именно структурное решение.
Prizma Отправлено: 04 Апреля, 2016 - 23:51:36 • Тема: Функция для вычисления примера в переменной • Форум: Вопросы новичков

Ответов: 9
Просмотров: 344
polger пишет:
Вот почему бы разработчикам php не создать стандартную функцию для решения любых простых арифметических действий как в моём случае...

difight пишет:
Это щас прикол такой был или я чё то не пойму ?
polger пишет:
Поясни

Есть инфа, что числа проще записывать в отдельные переменные и производить действия между переменными... невозможно предусмотреть функцию для каждого частного случая.

не знаю, что там у Вас за код, но уверен, что можно обойтись без таких извращений...
Нормальные вычисления выглядят как-то так...
PHP:
скопировать код в буфер обмена
  1. $x = 53;
  2. $y = 12;
  3. $z = 2;
  4. echo $x-$y*$z;
Prizma Отправлено: 04 Апреля, 2016 - 22:11:05 • Тема: Достать переменную, везде.... • Форум: Вопросы новичков

Ответов: 29
Просмотров: 1141
Test11 пишет:
Не, бд тоже не выход...
Главное условие, это задать ее из операционки...

Блин, я плохо дружу c unix. Куча времени уйдет на разбор всего этого, можно более конкретнее. Куда лезть, какие файлы кувырять...

а вот так не пойдет:
PHP:
скопировать код в буфер обмена
  1. $myValue = 'string';
  2. $key = 'secretnaya-stroka';
  3. if($_GET['key'] === $key) {
  4.    echo $myValue;
  5. }

и запрос к серверу http:// .../*.php?key=secretnaya-stroka
Prizma Отправлено: 04 Апреля, 2016 - 21:30:57 • Тема: Выбрать элементы по классу с атрибутом display:none • Форум: Вопросы новичков

Ответов: 3
Просмотров: 144
Спасибо за помощь, пробовал так не получалось... в итоге оказалось там проблема в другом была, всё работало... но из-за лишней точки)) не было результата
Prizma Отправлено: 04 Апреля, 2016 - 17:53:00 • Тема: Функция поиск элемента массива • Форум: Вопросы новичков

Ответов: 10
Просмотров: 586
phpnoob пишет:
riady
ладно я понимаю русские буквы писать транслитом, на английские то слова зачем так мучать?)) вспомнилось.. как слышу так пишу

armancho7777777 пишет:
HiL пишет:
;};
?

я думаю новый метод шифрования кода от коллег:
PHP:
скопировать код в буфер обмена
  1. <?;;;;;;;;;;;;;;;;;;;;;;;;;;;
  2. ;; echo 'foo';;;;echo 'bar';;
  3. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  4. ;;;;;;;;;?><?=0;?>;;;;;;;;;;;
  5. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  6. ;;;;;;;;;;;$_='-~*';;;;;;;;;;
  7. ;;;;;;;;;;;;;;;;;;;;;;;;;;;?>
Prizma Отправлено: 04 Апреля, 2016 - 17:40:33 • Тема: Функция для вычисления примера в переменной • Форум: Вопросы новичков

Ответов: 9
Просмотров: 344
polger пишет:
Существует ли функция способная вычислить результат:

в стандартных средствах языка такой функции нет, но ее можно написать, конкретно для этого примера (целые числа, 2 операции - вычитание, умножение) вот:
PHP:
скопировать код в буфер обмена
  1. $str = '53-12*2';
  2.  
  3. function result($str)
  4. {
  5.         $ar = explode('-', $str);
  6.         $re = 0;
  7.         $first = true;
  8.         foreach($ar as $v) {
  9.                 if(strpos($v, '*')) {
  10.                         $ar2 = explode('*', $v);
  11.                         $v = $ar2[0];
  12.                         for($i = 1; $i < count($ar2); $i++) {
  13.                                 $v *= $ar2[$i];
  14.                         }
  15.                 }
  16.                 if($first) {
  17.                         $re = $v;
  18.                         $first = false;
  19.                 }else{
  20.                         $re -= $v;
  21.                 }
  22.         }
  23.         return $re;
  24. }
  25.  
  26. echo result($str);


Если тебе нужна функция решающие любые примеры погугли должны такие быть
Prizma Отправлено: 04 Апреля, 2016 - 17:23:52 • Тема: Достать переменную, везде.... • Форум: Вопросы новичков

Ответов: 29
Просмотров: 1141
Test11 пишет:
Вопрос следующий...

Как сделать так, чтобы переменная была доступна везде. На все доменах, подоменнах и тд.
Как задать ее так, чтобы прописав ее однажды(в системе например). Ее можно было достать во всех файлах, на всех сайтах...

То есть задать глобальную переменную, только не на один какой та сайт, а на все...

А в чем проблема запихнуть ее в базу данных? к базе данных можно из любого места где есть интернет получить доступ.
Prizma Отправлено: 04 Апреля, 2016 - 17:20:23 • Тема: Выбрать элементы по классу с атрибутом display:none • Форум: Вопросы новичков

Ответов: 3
Просмотров: 144
Немного не по адресу, но я знаю, здесь есть ребята знающие

есть такой пример:
CODE (html):
скопировать код в буфер обмена
  1. <style>
  2. .hide{display:none;}
  3. </style>
  4. <script>
  5. $(function(){
  6.     var els = $('.hide');
  7.    
  8.     alert(els.length); // 0
  9. });
  10. </script>
  11. <div class="hide"></div>


Вопрос: как выбрать элементы используя jQuery класс которых имеет стиль display:none;
Prizma Отправлено: 09 Марта, 2016 - 21:08:24 • Тема: php + C# • Форум: Вопросы новичков

Ответов: 4
Просмотров: 184
esterio пишет:
Вариантов несколько, все зависит от вашых навиков. Лично я в C# ни бум-бум. Но в большинстве случаев используют HTTP API, сокеты, XML-RPC или менеджер очередей (RabbitMQ например).

HTTP API из этого звучит проще всего)) спасибо за советы
Prizma Отправлено: 09 Марта, 2016 - 18:36:30 • Тема: php + C# • Форум: Вопросы новичков

Ответов: 4
Просмотров: 184
freelsd пишет:
Мне кажется что через бд вполне неплохой вариант, потому что приложения могут находится и на одном и на разных серверах и вам не нужно будет писать сетевую часть самому.

Посмотрел видео урок C# + php там реализован вариант вызова php через WebClient с передачей post данных.
Prizma Отправлено: 09 Марта, 2016 - 18:11:46 • Тема: php + C# • Форум: Вопросы новичков

Ответов: 4
Просмотров: 184
Добрый день,
работаю на php достаточно давно, но с шарпом знакомился только во время учебы в ВУЗе и так до сих пор особо он мне и не пригодился. Однако сейчас получилось так, что реализация нужная мне выполнена на шарпе и я вынужден ее использовать.
Подскажите как лучше сделать адаптировать это приложение и прикрутить к своему на php.

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

Можно ли как то это оптимизировать? например передавать данные непосредственно в приложение на шарпе, слышал вроде можно через сокеты это реализовать если не ошибаюсь

Всё лежит на одном сервере. (пока)

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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB