PHP.SU

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

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

> Найдено сообщений: 77
igosja Отправлено: 05 Марта, 2015 - 10:17:48 • Тема: Потребление памяти против читабельности • Форум: Вопросы новичков

Ответов: 5
Просмотров: 136
Скажем, есть два варианта одной функции:
PHP:
скопировать код в буфер обмена
  1. function f_test_1($a,$b)
  2. {
  3.     return number_format(round(pow($a,2)*pow($b,3)+sqrt($a+$b),0),0,","," ");
  4. }
  5.  
  6. function f_test_2($a, $b)
  7. {
  8.     $a_pow     = pow($a, 2);
  9.     $b_pow     = pow($b, 3);
  10.     $mul_pow   = $a_pow * $b_pow;
  11.     $sum_a_b   = $a + $b;
  12.     $sqrt_sum  = sqrt($sum_a_b);
  13.     $sum_total = $mul_pow + $sqrt_sum;
  14.     $sum_total = round($sum_total, 0);
  15.     $sum_total = number_format($sum_total, 0, ",", " ");
  16.  
  17.     return $sum_total;
  18. }

В первом случае код занимает меньше места и чуть быстрее работает, но, чем больше в него будет напихано вычислений, тем сложнее его будет читать и вносить туда правки.
Во втором случае код лучше читается и поддерживается, но работает чуток медленнее и занимает больше места.
Какой вариант записи кода считается более правильным?
igosja Отправлено: 28 Февраля, 2015 - 22:58:19 • Тема: Генератор матчей в спортивном онлайн менеджере. • Форум: Вопросы новичков

Ответов: 0
Просмотров: 35
Занялся написанием спортивного онлайн менеджера.
Работа идет буквально 2-3 дня, пока занимаюсь версткой, планированием архитектуры, продумываю нормализацию баз данных. После написания каркаса нужно будет разработать генератор матчей.
Прошу форумчан отписать несколько идей, как это лучше сделать.
Какие решения сейчас более популярны в подобных задачах?

Самый простой вариант - многоуровневый генератор случайных чисел.
Типа, считаем силу виртуального игрока, считаем силу его оппонента на каком-то участке спортивной площадки, делаем rand() для выбора дальнейшего действия (отдать передачу партнеру, дриблинг, удар), делаем rand() для определения успешности действия, делаем if-else по результату и повторяем все заново $i раз. В конце считываем конечные показатели матча.

Может есть что-то более "изящное"?
igosja Отправлено: 20 Февраля, 2015 - 10:20:01 • Тема: Не понимаю ООП • Форум: Объектно-ориентированное программирование

Ответов: 112
Просмотров: 32837
gephaest пишет:
следуя вашей логике ... давайте делать приложения на ASM!

Немного не правильно вы поняли мою логику. Я говорю о том, что ООП при улучшении структуры сложного и объемного кода, одновременно превращает программу в mind-fuck с трудноуловимыми ошибками и утечками памяти.
igosja Отправлено: 09 Февраля, 2015 - 21:16:26 • Тема: MySQLi аналоги MySQL команд. • Форум: Вопросы новичков

Ответов: 4
Просмотров: 229
За полдня вроде как нашел.
PHP:
скопировать код в буфер обмена
  1. $value = mysql_result($result_sql,0,'value');
  2. //аналог
  3. $result_array = $result_sql->fetch_all(MYSQLI_ASSOC);
  4. $value = $result_array[0]['value']
;
igosja Отправлено: 09 Февраля, 2015 - 18:01:23 • Тема: MySQLi аналоги MySQL команд. • Форум: Вопросы новичков

Ответов: 4
Просмотров: 229
При тестировании кода система настойчиво рекомендует запросы mysql переписать в mysqli.
Я не смог нагуглить аналога только одной команды, которой я постоянно пользуюсь - mysql_result, поэтому прошу помощи, подскажите, как это написать.

PHP:
скопировать код в буфер обмена
  1. $sql = "SELECT * FROM `table`";
  2. $result_sql = mysql_query($sql);
  3. //нашел аналог $mysqli->query($sql);
  4.  
  5. $count_result = mysql_num_rows($result_sql);
  6. //нашел аналог $result_sql->num_rows;
  7.  
  8. $value = mysql_result($result_sql,0,'value');
  9. //Аналога не нашел, видел функции типа fetch_assoc, но это писанины на пару строк с массивами. Как это сделать аналогично одной командой?
igosja Отправлено: 05 Февраля, 2015 - 18:00:48 • Тема: Не понимаю ООП • Форум: Объектно-ориентированное программирование

Ответов: 112
Просмотров: 32837
Вызов страницы hello world в Zend Framework 2 PHP.



Задействовано 124 файла и 5620 вызовов функций (картинка в большом расширении, источник с данными тестов).

Когда-то я уже писал в этой теме, что не понимаю пользы ООП.
С тех пор я устроился в веб-контору, пишу сайты в компании других разработчиков, использую framework-и и ООП (ибо framework-и написаны в ООП стиле). Но свои фрилансовые проекты (на них у меня находиться время) не зависимо от сложности я пишу без ООП и framework-ов, на чистом PHP + Smarty (минимальную систему MVC в виде шаблонизатора я все таки использую) и, не смотря на опыт работы, мне все равно так писать легче.

На вкус и цвет товарища нет.
igosja Отправлено: 05 Февраля, 2015 - 11:43:34 • Тема: Шаблонизатор Smarty • Форум: CMS и фреймворки

Ответов: 4
Просмотров: 1121
and_07 пишет:
один файл main.tpl в нем

Спасибо, это то, что нужно. Все гениальное просто.
igosja Отправлено: 05 Февраля, 2015 - 10:04:37 • Тема: Шаблонизатор Smarty • Форум: CMS и фреймворки

Ответов: 4
Просмотров: 1121
and_07 пишет:
CODE (html):
скопировать код в буфер обмена
  1. {include file="header.tpl"}
  2. ........
  3. {include file="footer.tpl"}


Это все равно нужно писать в каждой странице.
На пример, на Yii шаблонах есть layout с верхом и низом, а внутри есть вывод <?php echo $content; ?>. Мы редактируем страницы контента, а layout подтягивается сам.

Можно ли что-то подобное настроить на Smarty?
igosja Отправлено: 04 Февраля, 2015 - 22:26:37 • Тема: Шаблонизатор Smarty • Форум: CMS и фреймворки

Ответов: 4
Просмотров: 1121
Не смог нагуглить решение следующей проблемы.

Я использую Smarty. Код страницы у меня выглядят следующим образом:

PHP:
скопировать код в буфер обмена
  1. $smarty->display('header.html');
  2.  
  3. //Здесь много кода по обработке данных и подготовке переменных для передачи в шаблон
  4.  
  5. $smarty->assign('var', $var);
  6.  
  7. $smarty->display('body.html');
  8. $smarty->display('footer.html');


Подключение кусков header и footer происходит на всех страницах. Можно ли как-то настроить систему, чтобы эти два файла подключались автоматически, а мне нужно было только прописать, какой шаблон подключать в середину?
igosja Отправлено: 30 Января, 2015 - 15:49:26 • Тема: Реляционные модели/тиаблицы в Yii • Форум: CMS и фреймворки

Ответов: 1
Просмотров: 636
В мануалах есть информация по реляции 2 таблиц, а как писать запрос если нужно больше?

Есть таблицы спортивных команд:
team (team_id, team_name, team_stadium_id)
stadium (stadium_id, stadium_name, stadium_city_id)
city (city_id, city_name, city_country_id)
country (country_id, country_name)

В моделях прописаны нужные relations пошагово:
- модель team связана stadium,
- модель stadium связана city,
- city с country.

Как написать запрос на выборку всех данных по id команды?
Конструкция $team->with('stadium')->with('city')->with('country')->findByPk($id) не работает, пишет что в team нет свойства city и country.
Или нужно сделать сквозную реляцию вплоть до таблицы country с модели team?
igosja Отправлено: 11 Января, 2015 - 16:16:42 • Тема: Объявление переменных после выборки из БД • Форум: Вопросы новичков

Ответов: 1
Просмотров: 52
Как более правильно оформлять в php данные из mysql? Не смог нагуглить в стандартах оформления кода.

Вариант 1:
CODE (htmlphp):
скопировать код в буфер обмена
  1. $sql = /*код запроса*/;
  2. $result_sql = mysql_query($sql);
  3.  
  4. if (mysql_result($result_sql,0,'value_1') > mysql_result($result_sql,0,'value_2'))
  5. {
  6.     /*Код*/
  7. }
  8. else
  9. {
  10.     /*Код*/
  11. }


Вариант 2:
CODE (htmlphp):
скопировать код в буфер обмена
  1. $sql = /*код запроса*/;
  2. $result_sql = mysql_query($sql);
  3.  
  4. $value_1 = mysql_result($result_sql,0,'value_1');
  5. $value_2 = mysql_result($result_sql,0,'value_2');
  6.  
  7. if ($value_1 > $value_2)
  8. {
  9.     /*Код*/
  10. }
  11. else
  12. {
  13.     /*Код*/
  14. }


То есть, как писать правильнее - присваивать переменным значения выборки, а потом работать с переменными (вариант 2) или работать напрямую с результатами выборки без объявления дополнительных переменных (вариант 1)?
igosja Отправлено: 09 Января, 2014 - 17:39:23 • Тема: Include без выполнения кода. • Форум: Вопросы новичков

Ответов: 16
Просмотров: 900
После очередной оптимизации кода нашлось новое решение поставленной задачи, может кому-то пригодиться.
Этот код
PHP:
скопировать код в буфер обмена
  1. if($a == 1)
  2. {
  3. /*выполняем что-то*/
  4. }
  5. else
  6. {
  7. /*выдаем сообщение об ошибке*/
  8. }

был заменен на такой
PHP:
скопировать код в буфер обмена
  1. if($a != 1)
  2. {
  3. /*выдаем сообщение об ошибке*/
  4. exit();
  5. }
  6. /*выполняем что-то*/

Таким образом условие можно вынести в файл include.php
PHP:
скопировать код в буфер обмена
  1. if($a != 1)
  2. {
  3. /*выдаем сообщение об ошибке*/
  4. exit();
  5. }

и подключить его к коду.
igosja Отправлено: 08 Ноября, 2013 - 20:12:43 • Тема: Перенаправление между страницами в crontab • Форум: Напишите за меня, пожалуйста

Ответов: 5
Просмотров: 1099
T1grOK пишет:
Так для crontab установите необходимый период запуска, а данные о limit храните в файле или БД.

Просто как пельмени, а я себе уже 3 день голову ломаю как сэмулировать браузер в консоли. Спасибо большое.
igosja Отправлено: 08 Ноября, 2013 - 18:49:19 • Тема: Перенаправление между страницами в crontab • Форум: Напишите за меня, пожалуйста

Ответов: 5
Просмотров: 1099
Здравствуйте, нужна помощь в следующем вопросе.

На сайте есть необходимость постоянной обработки больших циклов (обновление бд через цикл). Так как на хостинге стоят ограничения на использование процессорного времени, приходиться разбивать цикл на несколько маленьких и запускать их цепочкой.

Выглядит это так:
Файл 1.php
PHP:
скопировать код в буфер обмена
  1. include '../database.php';
  2. if (isset($_GET['limit']))
  3. {
  4.         $limit = mysql_escape_string($_GET['limit']);
  5. }
  6. else
  7. {
  8.         $limit = 0;
  9. }
  10. $sql = mysql_query("    SELECT `table_id`
  11.                         FROM `table`
  12.                         ORDER BY `table_id` ASC
  13.                         LIMIT $limit, 10");
  14. $count_sql = mysql_num_rows($sql);
  15. if ($count_sql > 0) //если выбрались какие-то данные
  16. {
  17.         for ($i=0; $i<$count_sql; $i++)
  18.         {
  19.                 $table_id = mysql_result($sql,$i,'table_id');
  20.                 //обрабатываем данные и обновляем таблицу
  21.         }
  22.         $limit = $limit + 10; //увеличиваем лимит
  23.         $href = '1.php?limit='.$limit;
  24.         print   '<script type="text/javascript">
  25.                 function doit()
  26.                 {
  27.                         window.location.href="'.$href.'";
  28.                 }
  29.                 setTimeout(doit, 2000);
  30.                 </script>'; // и перезапускаем файл
  31. }
  32. else //если все данные уже обработаны, запускаем второй файл
  33. {
  34.         $href = '2.php?limit=0';
  35.         print   '<script type="text/javascript">
  36.                 function doit()
  37.                 {
  38.                         window.location.href="'.$href.'";
  39.                 }
  40.                 setTimeout(doit, 2000);
  41.                 </script>';
  42. }
  43.  

При запуске руками в браузере файлы работают нормально, но в crontab нет браузера, который бы выполнял js или header(location).

Как реализовать такой редирект в crontab?
igosja Отправлено: 08 Ноября, 2013 - 17:04:15 • Тема: Перенаправление в curl/crontab • Форум: Операционная система и системные вызовы

Ответов: 3
Просмотров: 2413
caballero пишет:
где пренаправится? В отсутствие браузера понятие "перенаправится" не имеет смысла.
В файле 1.php я даю строки
PHP:
скопировать код в буфер обмена
  1. $href = 'http://site/test/2.php';
  2. header("refresh: 2; url=$href");

а в test.php имитирую браузер строками
PHP:
скопировать код в буфер обмена
  1. curl_setopt ($ch, CURLOPT_USERAGENT , "Mozilla/5.0 (Windows; U; Windows NT 5.1; ru-RU; rv:1.7.12) Gecko/20050919 Firefox/1.0.7");
  2. curl_setopt ($ch, CURLOPT_FOLLOWLOCATION, 1);

Это я откопал по справочникам curl. Или такая система не верна и она работать не будет?

Страниц (6): « 1 2 3 [4] 5 6 »
Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB