function outer($x) { // Родительская функция. inner($x * $x); }
function test() { function inner() { print 'test'; } inner(); }
function scope() { $foo = 10; function inner() { echo "foo -> {$foo}" . PHP_EOL; } inner(); }
function outer($msg) { function inner($msg) { echo 'inner: ' . $msg . ' '; } echo 'outer: ' . $msg . ' '; inner($msg); }
function customjson($objDesc) { return "{'Y' : {" . inner($objDesc['Y']) . "}, 'N' : {" . inner($objDesc['N']) . "}}"; }
function outer() { $obj = new Orator(__METHOD__); inner(); }
<?php ## Работа с буфером вывода в "объектном" стиле. spl_autoload_register(); // Перехватываем выходной поток в программе. $h = new \Buffering\Output(); // Текст попадет в буфер. echo "Начало внешнего перехвата.<br />"; // Вызываем функцию, "не зная", что она перехватывает вывод. $formatted = inner(); // Печатаем еще текст в буфер. echo "Конец внешнего перехвата."; // Фомируем некоторый текст по шаблону. $text = "{$h->__toString()}<br>Функция вернула: \"{$formatted}\""; // Завершаем перехват. Буфер освободится автоматически в деструкторе. $h = null; // Печатаем то, что накопили в переменной, и заканчиваем работу. echo $text; exit; // Функция, перехватывающая выходной поток в своих целях. // Гарантирует, что при выходе буфер будет восстановлен. function inner() { $buf = new \Buffering\Output(); echo "Этот текст попадет в буфер."; return "<b>{$buf->__toString()}</b>"; // Не нужно заботиться о ручном вызове ob_end_clean() - // это автоматически делает деструктор объекта $buf! }
function outer($arg) { $x = $arg + 35; return $x + inner($x); }
function outer() { echo "Вошли в функцию " . __METHOD__ . "<br>"; inner(); echo "Вышли из функции " . __METHOD__ . "<br>"; }
function outetr($x) { inner($x * $x); }