2014-01-23 4 views
0

У меня есть большой список методов, которые я вызываю, исходя из значения свойства. Мне было интересно, есть ли более правильный метод делать то, что я делаю?Вызвать метод, основанный на значении свойства

Мой код прямо сейчас:

if ($qvalue->fid == 1) { $this->Archive1(); } 
if ($qvalue->fid == 2) { $this->Archive2(); } 
if ($qvalue->fid == 3) { $this->Archive3(); } 
if ($qvalue->fid == 4) { $this->Archive4(); } 
if ($qvalue->fid == 5) { $this->Archive5(); } 
if ($qvalue->fid == 6) { $this->Archive6(); } 
if ($qvalue->fid == 7) { $this->Archive7(); } 
if ($qvalue->fid == 8) { $this->Archive8(); } 
if ($qvalue->fid == 9) { $this->Archive9(); } 
if ($qvalue->fid == 10) { $this->Archive10(); } 
... 

Могу ли я сделать что-то вроде этого:

$this->Archive($qvalue->fid)(); 

Я знаю, что это не будет работать, я просто не уверен, что если что-то лучше, возможно. Даже не уверен, что искать, чтобы увидеть похожие сообщения.

+0

Это зависит от того, что в 'Archive9(), Archive10()' и так далее – codingbiz

+0

Я просто интересно, если есть лучший способ вызова/запустить метод Archive9(). Не важно, что в нем. – ATLChris

+0

Важно то, что с кучей функций, которые делают то же самое (только с * предположительно * разными данными), является сломанным дизайном. Это не значит, черт возьми. Если разница - это данные, то они должны быть одним методом, по той же причине, что '$ item1',' $ item2', '$ item3' ... фактически должны быть массивом. (Если вам не нравится передавать параметры каждой функции, вы можете сохранить их в массиве ассоциативных массивов, индексированных по значению '$ qvalue-> fid'.) Если функциональность отличается, это другая дело. (Но это также означает, что ваши * имена * нарушены.) – cHao

ответ

1
$method = 'Archive' . $qvalue->fid; 
if (method_exists($this, $method)) 
{ 
    $this->$method(); 
} 
+0

Я только что провел несколько тестов, и это отлично работает. Спасибо! – ATLChris

Смежные вопросы