/** * @param ClassInfo $classInfo * @param string $callback * @param string $callbackMethod * @param string|null $value * @return Expr */ protected function prepareCallbackNode(ClassInfo $classInfo, $callback, $callbackMethod, $value = null) { // controller as service callback if (preg_match('/^([^:]+):([^:]+)$/', $callback, $matches) === 1) { if ($matches[1] == '__self') { $matches[1] = $classInfo->getServiceId(); } return $this->{$callbackMethod}($matches[1], $matches[2], $value); } elseif (preg_match('/^([^:]+)::([^:]+)$/', $callback, $matches) === 1) { if ($matches[1] == '__self') { $matches[1] = $classInfo->getName(); } return new String_($matches[1] . '::' . $matches[2]); } else { return new String_($callback); } }
/** * @param ClassInfo $classInfo * @param array $statements * @return Assign */ protected function prepareNode(ClassInfo $classInfo, array $statements) { return new Assign(new ArrayDimFetch(new Variable('app'), new String_($classInfo->getServiceId())), new MethodCall(new Variable('app'), 'share', array(new Arg(new Closure(array('uses' => array(new ClosureUse('app')), 'stmts' => $statements)))))); }