2016-03-26 3 views
3

У меня есть ситуации, когда это работает в PHP5, но fatals в PHP7:совместимость Переменный функция PHP 7 и PHP5

/* load batch processing data into variable */ 
$args = get_option('leads_batch_processing'); 
/* process batches */ 
self::$args['method']($args); 

И это работает в PHP7 но fatals PHP5:

/* load batch processing data into variable */ 
$args = get_option('leads_batch_processing'); 
/* process batches */ 
self::{$args['method']}($args); 

Как может Я успешно использую функцию переменной в обеих средах PHP? Я попытался использовать условие if на основе PHP-версии, но синтаксис версии PHP7 устарел PHP5, поэтому я не могу пройти этот маршрут.

Что мне делать?

+0

[call_user_func ()] (http://php.net/manual/en/function.call-user-func.php)? –

+0

Не могли бы вы предложить это как ответ? В случае выше $ args не является частной или статической переменной. Но внутри $ args ['method'] есть имя функции, которое существует в вызывающем классе (self: :) – atwellpub

+0

Второй код должен работать как на PHP 5, так и на PHP 7. Убедитесь, что вы не тестируете некоторые устаревшие PHP версии (например, 5.3). – NikiC

ответ

2

Назначают его к обычной переменной, которая не вызовет синтаксическую ошибку:

$method = $args['method']; 
$this->$method($args); 

Или, подобно тому, что было предложено в комментариях, используйте call_user_func():

call_user_func(
    array($this, $args['method']), 
    $args 
); 
Смежные вопросы