예제 #1
0
function _self()
{
    $stack = stack();
    if (!isset($stack['class'])) {
        trigger_error("Using self in wrong context", E_USER_ERROR);
    } elseif (func_num_args() == 0) {
        return $stack['class'];
    }
    $func_args = func_get_args();
    $storage = storage();
    if (sizeof($tmp = explode('()', $func_args[0])) > 1) {
        $function = trim($tmp[0]);
        $function_l = strtolower($function);
        unset($func_args[0]);
        if (!isset($storage['classes'][$stack['class']]['methods'][$function_l])) {
            if (isset($storage['classes'][$stack['class']]['methods']['__callstatic'])) {
                _self('__callstatic()', $function, array_values($func_args));
            }
            trigger_error("Call to undefined method {$storage['classes'][$stack['class']]['class']}::" . "{$function}()", E_USER_ERROR);
        } elseif ($storage['classes'][$stack['class']]['methods'][$function_l]['access'][0] > 1 && isset($storage['classes'][$stack['class']]['methods'][$function_l]['extended']) && (!isset($storage['classes'][$stack['class']]['methods'][$stack['method']]['extended']) || strcasecmp($storage['classes'][$stack['class']]['methods'][$stack['method']]['extended'], $storage['classes'][$stack['class']]['methods'][$function_l]['extended']))) {
            trigger_error("Call to private method {$storage['classes'][$stack['class']]['methods'][$function_l]['extended']}::" . "{$function}()", E_USER_ERROR);
        }
        stack(array('class' => $stack['class'], 'method' => $function_l));
        $result = call_user_func_array($storage['classes'][$stack['class']]['methods'][$function_l]['value'], array_values($func_args));
        stack(true);
        return $result;
    } else {
        $key = strtolower(trim((string) $func_args[0]));
        sizeof($func_args) > 1 && ($value = $func_args[1]);
        if (!isset($storage['classes'][$stack['class']]['properties'][$key]) || !$storage['classes'][$stack['class']]['properties'][$key]['static']) {
            trigger_error("Access to undeclared static property {$storage['classes'][$stack['class']]['class']}::{$key}", E_USER_ERROR);
        } elseif (isset($value)) {
            $storage['classes'][$stack['class']]['properties'][$key]['value'] = $value;
            storage($storage);
        }
        return $storage['classes'][$stack['class']]['properties'][$key]['value'];
    }
}
예제 #2
0
파일: tick.php 프로젝트: gajus/bugger
<?php

require __DIR__ . '/../vendor/autoload.php';
tick(3);
// tick 1, false
tick(3);
// tick 2, false
echo 'b';
xdebug_break();
echo 'a';
tick(3);
// tick 3, true
do {
    stack('a');
} while (!tick(5));
// tick 4, tick 5
예제 #3
0
파일: stack.php 프로젝트: gajus/bugger
function stackb()
{
    stack('b');
}