Example #1
0
    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;
        }
        $data = call_user_func_array($fn, $args);
        $m->set($key, $data, $timeout);
        return $data;
    });
});
def('def_accessor', function ($name, $defaul = null) {
    def($name, function () use($defaul) {
        static $state, $first_run = true;
        if ($first_run) {
            $state = $defaul;
            $first_run = false;
Example #2
0
<?php

// Четвёртым аргументом для def_md можно передат функцию, которая будет
// создавать ключ для кэширования результатов
def_md('sum', 5, function ($a, $b) {
    echo ".";
    return $a + $b;
}, function ($fname, $args) {
    return "{$fname}:" . implode('-', $args);
});
echo sum(1, 2) . "\n";
echo sum(1, 2) . "\n";
echo bu\def\memcached()->get('sum:1-2') . "\n";
flush_md();
echo bu\def\memcached()->get('sum:1-2') . "\n";
echo sum(1, 2) . "\n";
echo sum(1, 2) . "\n";
?>
---
.3
3
3

.3
3