Forum Webscript.Ru
		Программирование => PHP => Тема начата: Foshvad от 12 Июля 2002, 11:24:07
		
			
			- 
				Есть функция, которая что-то echo; Во что ее надо заключить, чтоб в результате получился return? 
 
 
 function ech()	{
 echo “123”;
 }
 
 echo “4444 ”.ech().” 5555”;
 
 
 очень бы хотелось в результате увидеть “4444 123 5555”
 
 
 Думал получится
 
 echo “4444 ”. ob_start().ech().ob_get_contents().ob_end_clean().” 5555”;
 
 
 но ob_start() возвращает ‘1’; Которая вылазит совершенно не в тему в самом начале.
- 
				А почему не воспользоваться return?
 function ech()    {
 return "123";
 }
- 
				Потому что функция ech() используется в других местах и должна делать именно echo;
 А в этом месте надо именно return
- 
				
 function ech($return = 0) {
 $str = "123";
 if ($return) return $str;
 echo "123";
 }
 
- 
				Увы, но функцию ech менять нельзя :((
			
- 
				
 ob_start();
 ech();
 $content = ob_get_contents();
 ob_end_clean();
 echo "4444 ".$content." 5555";
 
- 
				Как выяснилось, этому чудику надо было всего лишь 
 echo “4444 ”;
 ech();
 echo ” 5555”;
- 
				Надо было вовсе не это. Но раз ничего другого предложить не можешь, то подойдет и это.
			
- 
				тут тебе помогут (http://www.doctor.ru)
			
- 
				2RomikChef: по-моему кто-то себя бестактно ведет.
			
- 
				Да.
 Этот кое-кто отнимает кучу времени у кучи народу как минимум на двух форумах только потому, что его, видете ли, ломает писать в столбик и непременно хочется в строчку.
- 
				А в столбик то лучше. тем более потом с кодом проще разбираться. да и пробелы лишними почти небывают !
			
- 
				Проблема решить таки удалось:
 [[somefunction(\'param\')]] заменяется на
 
 
 $tpl[$template] = str_replace(\'[[\',\'".echo2return(\\\'\',$tpl[$template]);
 $tpl[$template] = str_replace(\']]\',\'\\\')."\',$tpl[$template]);
 
 
 
 а в
 
 
 function echo2return ($string)	{
 extract($GLOBALS);
 $string = str_replace(\'\\"\',\'"\',$string);
 ob_start();eval("echo $string;");$contents=ob_get_contents();ob_end_clean();
 return $contents;
 }
 
 
 
 В "столбик" это записать было нельзя, так как обрабатывается это eval\'ом в шаблоне, да и такие функции, как print_r изменять чтоб они return вместо echo явно не стоило