функция класса php -> вызвать функцию в соответствии с передаваемым параметром - PullRequest
0 голосов
/ 17 февраля 2010

У меня есть класс 'abc' с несколькими функциями внутри него: 'Abc_function1' 'Abc_function2' 'Abc_function3' 'Abc_function4' 'Abc_function5'

Я хотел бы вызвать функцию класса 'abc' в соответствии с параметром, который я ввожу, например, строку, содержащую 'function1' или 'function 4', для ссылки на соответствующую функцию класса. *

Надеюсь, я ясно дал понять;)

Большое спасибо за вашу помощь

Ответы [ 3 ]

5 голосов
/ 17 февраля 2010

Не совсем уверен, почему, но, на мой взгляд, это имеет определенный запах кода. Но все равно ...

Метод a): реализовать «магический» метод __ call ($ name, $ params) .

<?php
class Foo {
  public function abc_function1() {
    echo "function #1";
  }

  public function abc_function2() {
    echo "function #2";
  }

  public function abc_function3() {
    echo "function #3";
  }

  public function __call($name, $params) {
    $fqn = 'abc_'.$name;
    if ( method_exists($this, $fqn) ) {
      call_user_func_array( array($this, $fqn), $params);
    }
  }
}

$f = new Foo;
$f->function2();

Метод б): та же идея, только без автоматического отображения.

<?php
class Foo {
  public function abc_function1() {
    echo "function #1";
  }

  public function abc_function2() {
    echo "function #2";
  }

  public function abc_function3() {
    echo "function #3";
  }

  public function doSomething($x, $y, $z) {
    $fqn = 'abc_'.$x;
    if ( method_exists($this, $fqn) ) {
      call_user_func_array( array($this, $fqn), array($y, $z));
    }
  }
}

$f = new Foo;
$f->doSomething('function2', 1, 2);

Метод c) Если вы знаете номер параметра, вы также можете использовать

$this->$fqn($,y, $z)

вместо

call_user_func_array( (array($this, $fqn), array($y, $z) );

см. Также: http://docs.php.net/call_user_func_array и http://docs.php.net/functions.variable-functions

0 голосов
/ 17 февраля 2010

Вы можете использовать переменные функции PHP:

function call_function( $string ) {
    $var = 'abc_' . $string;
    $retval = $var(); // this will call function named 'abc_'
                      // plus the contents of $string
    return $retval;
}
0 голосов
/ 17 февраля 2010
$class_instance = new class();
call_user_func( 
   array( $class_instance, $your_string_containing_the_fx_name ), 
   $the_parameters_you_want_to_pass
);
...