Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Epic PHP #8

Roma
March 24, 2014

Epic PHP #8

Слайды к восьмому занятию курса Epic PHP (http://epixx.ru/epic-php/).
Темы: closures, cron, Silex, советы

Roma

March 24, 2014
Tweet

More Decks by Roma

Other Decks in Programming

Transcript

  1. Анонимные функции Анонимные функции, также известные как замыкания (closures), позволяют

    создавать функции, не имеющие определенных имен. Они наиболее полезны в качестве значений callback-параметров, но также могут иметь и множество других применений.
  2. before function isEven($val) { return $val % 2 == 0;

    } $arr_even = array_filter($arr, 'isEven'); ! function square($val) { return $val * $val; } $arr_square = array_map('square', $arr);
  3. after $arr = range(0, 10); $arr_even = array_filter( $arr, function($val)

    { return $val % 2 == 0; } ); ! $arr_square = array_map( function($val) { return $val * $val; }, $arr );
  4. use public function getTotal($tax) { $total = 0.00; ! $callback

    = function ($quantity, $product) use ($tax, &$total) { $pricePerItem = constant(__CLASS__ . "::PRICE_" . strtoupper($product)); $total += ($pricePerItem * $quantity) * ($tax + 1.0); }; ! array_walk($this->products, $callback); return round($total, 2); }
  5. Терминология — отстой Есть лямбда-функции, есть замыкания. Все это объединяется

    понятием «анонимные функции». Лямбду называют замыканием, если она использует переменные родительской функции после отработки последней (т.е. замыкает эти переменные на себя).
  6. create_function $av = array("the ", "a ", "that ", "this

    "); array_walk($av, create_function('&$v,$k', '$v = $v . "mango";')); print_r($av);
  7. Задание Дан массив вида: $data = array( array('id' => 1,

    'name' => 'Bob', 'position' => 'Clerk'), array('id' => 2, 'name' => 'Alan', 'position' => 'Manager'), ); ! Используя функцию array_map и анонимную функцию, создайте массив, состоящий только из имен (поле name).
  8. Задание Дан массив вида: $data = array( array('date' => 'tomorrow',

    'title' => 'World'), array('date' => 'today', 'title' => 'Hello'), ); ! Используя функцию uasort и анонимную функцию, отсортируйте массив по возрастанию значения даты.
  9. Cron # crontab -e 00 * * * * php

    /home/john/myscript.php */10 * * * * wget -q -O temp.txt http://www.thegeekstuff.com/myscript.php
  10. Silex require_once __DIR__.'/../vendor/autoload.php'; ! $app = new Silex\Application(); ! $app->get('/hello/{name}',

    function($name) use($app) { return 'Hello '.$app->escape($name); }); ! $app->run();
  11. Bootstrap // web/index.php ! require_once __DIR__.'/../vendor/autoload.php'; ! $app = new

    Silex\Application(); $app['debug'] = true; ! // definitions ! $app->run();
  12. Routes use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; ! $app->post('/feedback', function (Request $request)

    { $message = $request->get('message'); mail('[email protected]', '[YourSite] Feedback', $message); ! return new Response('Thank you for your feedback!', 201); });
  13. Errors use Symfony\Component\HttpFoundation\Response; ! $app->error(function (\Exception $e, $code) { return

    new Response( 'We are sorry, but something went terribly wrong.' ); });
  14. JSON $app->get('/users/{id}', function ($id) use ($app) { $user = getUser($id);

    ! if (!$user) { $error = array('message' => 'The user was not found.'); return $app->json($error, 404); } ! return $app->json($user); });
  15. Database $app->register(new Silex\Provider\DoctrineServiceProvider(), array( 'db.options' => array( 'driver' => 'pdo_mysql',

    'host' => 'localhost', 'dbname' => 'my_database', 'user' => 'my_username', 'password' => 'my_password', 'charset' => 'utf8', ), ), );
  16. Database $app->get('/blog/{id}', function ($id) use ($app) { $sql = "SELECT

    * FROM posts WHERE id = ?"; $post = $app['db']->fetchAssoc($sql, array((int) $id)); ! return "<h1>{$post['title']}</h1>". "<p>{$post['body']}</p>"; });
  17. Регулярки Регулярные выражения (англ. regular expressions, сокр. RegExp, RegEx, жарг.

    регэкспы, регексы или регвыры) — формальный язык поиска и осуществления манипуляций с подстроками в тексте, основанный на использовании метасимволов (символов-джокеров, англ. wildcard characters). По сути это строка-образец (англ. pattern, по-русски её часто называют «шаблоном», «маской»), состоящая из символов и метасимволов и задающая правило поиска.
  18. Регулярки Мощный инструменты для анализа и манипуляций с текстом. По

    сути это мини-язык для описания и парсинга текста.
  19. Задание С помощью регуярных выражений получать title произвольной страницы. Саму

    страницу можно получать с помощью любой файловой функции или CURL.
  20. XDebug Единственный и лучший отладчик для PHP. Позволяет отследить исполнение

    кода и контролировать содержимое вашего стэка. Интегрируется с большинством IDE с возможностью установки breakpoint’ов.
  21. Master your editor • Sublime Text • PHPStorm • other

    IDEs: Eclipse, NetBeans • vim (http://vim-adventures.com/)
  22. Bytecode Cache Во время исполнения PHP файла, под капотом он

    сперва компилируется в байткод(или опкод) и только потом, исполняется байткод. Если PHP файл не изменен, байткод будет всегда одинаков. Это значит, что шаг компиляции - пустая трата процессорных ресурсов.
  23. Bytecode Cache • APC • XCache • Zend Optimizer+ (часть

    Zend Server) • WinCache (расширение для MS Windows Server)
  24. Кэширование данных $data = apc_fetch('expensive_data'); if ($data === false) {

    apc_add('expensive_data', $data = get_expensive_data()); } ! print_r($data);
  25. Люди • Rasmus Lerdorf • Fabien Potencier • Derick Rethans

    • Chris Shiflett • Sebastian Bergmann