eval в методе класса

AdminGorkyRu

Новичок
eval в методе класса

Добрый день. Господа подскажите пожайлуста почему моте происходить следующая штука:
PHP:
class TModulManager {

 function showInitialForm($modulName){
  $mht=get_class_methods($modulName);
  if(in_array("showInitialForm",$mht))
   $frm=eval("$modulName::showInitialForm();")
//  else $frm="";
  return $frm;
 }

}
при подключении этого файла в проект начинает ругаться:
Parse error: parse error, unexpected T_RETURN in #\#\tmodulManager.php on line #

тот же самый код, не в классе, выполняется нормально. Скажите пожайлуста, что это может быть?
Читал мануал - ничего не нашел.

Апач 1.3
ПХП 4.3
 

IntenT

SkyDiver
точки с запятыми Пушкин ставить будет???
рановато что-то ты за ООП взялся
 

crocodile2u

http://vbolshov.org.ru
Зачем тебе здесь eval ? используй call_user_func()

Уйй - а там еще и в синтаксисе...
 

AdminGorkyRu

Новичок
Автор оригинала: IntenT
точки с запятыми Пушкин ставить будет???
рановато что-то ты за ООП взялся
спасибо за указание мое несусветной тупости.
Но вот с выводами зря ты так.... я не первый год программирую (не только на пхп)....
 

Screjet

Новичок
И еще одна ошибка в
PHP:
$frm=eval("$modulName::showInitialForm();")
догадаешься где ошибка? ;)
 

AdminGorkyRu

Новичок
Автор оригинала: Screjet
И еще одна ошибка в
PHP:
$frm=eval("$modulName::showInitialForm();")
догадаешься где ошибка? ;)
правельнее было бы сделать так:
PHP:
  ob_start();
  eval($input);
  $text=ob_get_contents();
  ob_end_clean();
ты это имеешь ввиду? или нет?
 

Screjet

Новичок
Эх.. :( Правильный ответ.
PHP:
$frm=eval("return $modulName::showInitialForm();");
 

IntenT

SkyDiver
AdminGorkyRu
правильнее сделать так:
PHP:
class TModulManager { 

function showInitialForm($modulName){ 
   if(in_array(strtolower("showinitialform"), get_class_methods($modulName) )) {
      return call_user_func(array($modulName, "showInitialForm"));
   }
   else {
      return null;
   }
} 

}
 

AdminGorkyRu

Новичок
Автор оригинала: Screjet
Эх.. :( Правильный ответ.
PHP:
$frm=eval("return $modulName::showInitialForm();");
ээ... ступил.. этот пример есть в форуме.. я не думал, что ты про это спрашиваешь.. тот код, который я в этом топике оставил это самый первый вариант, воторой был уже с return'ом.. а самы последний уже с call_use_func ...

Я вот только не понимаю, почему лучше использовать call_user_func, а не eval.... разницу между ними я понимаю..


>strtolower("showinitialform")
это вроде как не обязательно.... на именя функций и методов не распространиется чувствительность к регистру.. они и так все по умолчанию в нижнем регистре...
 

IntenT

SkyDiver
AdminGorkyRu
это вроде как не обязательно....
Посмотри на свой первый пост. твоя проверка никогда на срабатывала, потому что get_class_methods возвращает все в нижнем регистре. а сравниваешь ты с верблюдом.
strtolower я написал, чтоб ты понял, что надо приводить к нижнему.
Я вот только не понимаю, почему лучше использовать call_user_func, а не eval.... разницу между ними я понимаю..
Значит не понимаешь разницы, раз непонимаешь, почему лучше использовать call_user_func а не eval
 
Сверху