Создать функции из значений массива

0

Я пытаюсь посмотреть, есть ли способ создать функции из значений массива.

У меня есть массив имен таблиц базы данных:

Array
(
    [0] => table1
    [1] => table2
    [2] => table3
    [3] => table4
    [4] => table5
)

и т.д. Я хочу иметь возможность создавать функцию с каждым из имен таблиц:

public function table1()
{
    // function code here...
}

public function table2()
{
    // function code here...
}

Код в каждой функции будет таким же на данный момент. Просто пытаюсь получить функцию, созданную каждый раз, когда в базу данных добавляется новая таблица.

Благодарю!

Каждая функция будет выглядеть примерно так:

public function tablename()
{
    $obj = new obj();
    $obj->set_table('tablename');

    $this->_output_view($obj->render());
}
  • 0
    Это будет внутри класса?
  • 0
    Кроме того, что вы хотите, чтобы каждый из них делал? Когда вы динамически создаете каждую функцию, что вы хотите, чтобы ее тело было? Сделать их всех одинаковым телом возможно ... сделать их всех по-разному сложнее (если вообще возможно).
Показать ещё 4 комментария
Теги:
arrays
function

1 ответ

1
Лучший ответ

Если это внутри класса, то вы можете использовать __call() "магический метод" в PHP. В принципе, в классе это вызывается всякий раз, когда вы выполняете $obj->func(), независимо от того, существует или нет функция.

Таким образом, вы можете просто выполнить необходимые действия без создания функций.

Вот простой пример:

class Tables{
    private $tables;

    function __construct(){
        // Your array of tables
        $this->tables = array(
            'table1',
            'table2',
            'table3'
        );
    }

    // This is automatically called when doing $yourObj->table1(), for example
    function __call($name, $params=array()){
        // Check if the method called is a table name
        if(in_array($name, $this->tables)){
            // If so, then do whatever with the table name
            $obj = new obj();
            $obj->set_table($name);

            $this->_output_view($obj->render());
        }
        // Let make sure to pass on the call to other methods in this class
        elseif(method_exists($this, $name)){
            return call_user_func_array(array($this, $name), $params);
        }
    }
}
  • 1
    Спасибо, Ракета. Это в значительной степени то, что я искал. У фреймворка, который я использую, есть странная проблема с методом __call, но у них есть свой собственный _remap (), который в основном делает то же самое. Еще раз спасибо!
  • 0
    Пожалуйста :-)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню