}); def('module', function ($nm, $block) { $prefix = Memo::$prefix; Memo::$prefix = $nm . '::'; $block(); Memo::$prefix = $prefix; }); def('ns', function ($nm, $block) { $prefix = Memo::$prefix; Memo::$prefix = $nm . "\\"; $block(); Memo::$prefix = $prefix; }); def_memo('bu\\def\\memcached', function () { $r = new Memcached(); $r->addServer('localhost', 11211); return $r; }); def('def_md', function ($nm, $timeout, $fn, $key_fn = null) { def($nm, function () use($nm, $timeout, $fn, $key_fn) { $args = func_get_args(); if (!is_null($key_fn)) { $key = $key_fn($nm, $args); } else { $key = '-bu-defun-' . md5($nm . '-' . serialize($args)); } $m = bu\def\memcached(); $data = $m->get($key); if ($m->getResultCode() == Memcached::RES_SUCCESS) { return $data; }
<?php def_accessor('s4_bucket'); def_accessor('s4_region', 'eu-west-1'); def_memo('s4', function () { return Aws\S3\S3Client::factory(array('region' => s4_region())); }); def('s4_delete', function ($key) { return s4()->deleteObject(array('Bucket' => s4_bucket(), 'Key' => $key)); }); def('s4_url', function ($key) { return s4()->getObjectUrl(s4_bucket(), $key); }); def('s4_put', function ($key, $body, $ct = null) { $t = array('Bucket' => s4_bucket(), 'Key' => $key, 'Body' => $body); if (!is_null($ct)) { $t['ContentType'] = $ct; } return s4()->putObject($t); }); def('s4_get', function ($key) { $t = array('Bucket' => s4_bucket(), 'Key' => $key); $t = s4()->getObject($t); return $t['Body']; }); def('s4_put_file', function ($key, $pth, $ct = null) { $t = array('Bucket' => s4_bucket(), 'Key' => $key, 'SourceFile' => $pth); if (!is_null($ct)) { $t['ContentType'] = $ct; } return s4()->putObject($t);
$call(); }); say('one', 'two'); // ME>>: _ONE_, _TWO_ undef_wrapper('say'); say('one', 'two'); // ME>>: ONE, TWO undef_wrapper('say'); say('one', 'two'); // ME>>: one, two undef_wrapper('say'); say('one', 'two'); //ME: one, two ////////////////////////////////////////////////// def_memo('sum', function ($one, $two) { echo "Summing: {$one} - {$two} \n"; return $one + $two; }); puts('Result: ' . sum(1, 2)); puts('Result: ' . sum(1, 2)); puts('Result: ' . sum(2, 2)); // Summing: 1 - 2 // Result: 3 // Result: 3 // Summing: 2 - 2 // Result: 4 /////////////////////////////////// def_converter('id', 'object', function ($i) { return (object) $i; }); print_R(id_to_object(13)); /*
<?php // def_memo создаёт функцию, которая хранит все результаты вычислений. // http://en.wikipedia.org/wiki/Memoization def_memo('sum', function ($a, $b) { echo '.'; return $a + $b; }); echo sum(1, 2) . "\n"; echo sum(1, 3) . "\n"; echo sum(1, 2) . "\n"; echo sum(2, 1); ?> --- .3 .4 3 .3
<?php require "vendor/autoload.php"; def_accessor('cltr\\pdo_host'); def_accessor('cltr\\pdo_dbname'); def_accessor('cltr\\pdo_user'); def_accessor('cltr\\pdo_password'); def_accessor('cltr\\pdo_table'); def_memo('cltr\\pdo', function () { $db = new PDO('mysql:host=' . cltr\pdo_host() . ';dbname=' . cltr\pdo_dbname(), cltr\pdo_user(), cltr\pdo_password()); $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_SILENT); $db->query('set names utf8'); return $db; }); def_accessor('cltr\\time_start'); def('cltr\\start', function () { cltr\time_start(microtime(true)); }); def('cltr\\uri', function () { if (isset($_SERVER['REQUEST_URI'])) { return $_SERVER['REQUEST_URI']; } }); def('cltr\\host', function () { if (isset($_SERVER['HTTP_HOST'])) { return $_SERVER['HTTP_HOST']; } }); def('cltr\\time', function () { return microtime(true) - cltr\time_start(); });