2016-03-09 3 views
0

Можно ли использовать публичные функции внутри публичной функции в php?Использовать публичные функции внутри публичной функции

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

$input 

for= function1 -> output1 -> function2->output2->function3->output3. 

Я хочу использовать вывод, что для моей следующей функции. Кроме того, 4 функции, которые у меня есть в цикле for, имеют цикл 9 раз.

в этом случае его шифрование AES. У меня есть 4 функции: subBytes, shiftRows, mixColumns, addRoundkey.

Это моя публичная функция шифрования:

public function encrypt($input) 
{ 
    $functions= ('subBytes', 'shiftRows', 'mixColumns', 'addRoundKey'); 
    foreach($functions as $function) 
    { 
     $input = $$function($input); 
    } 

    return($input); 
} //end function encrypt 

и это одна из моих функций:

public function subBytes($state) 
{ 
    for ($row=0; $row<4; $row++){ // for all 16 bytes in the (4x4-byte) State 
     for ($column=0; $column<4; $column++){ // for all 16 bytes in the (4x4-byte) State 
      $_SESSION['debug'] .= "state[$row][$column]=" . $state[$row][$column] ."-->" . self::$sBox[$state[$row][$column]]."\n"; 
      $state[$row][$column] = self::$sBox[$state[$row][$column]]; 
     } 
    } 
    return $state; 
} 
+0

'общественная функция блабла()' означает метод класса. Пока он не является «статическим» методом, он должен быть вызван с использованием объекта. Вы не можете называть его просто 'subBytes()', вы, вероятно, хотите '$ this-> subBytes()'. Когда имя функции генерируется во время выполнения, вы можете либо использовать решение, представленное в [этом ответе] (http://stackoverflow.com/a/35886758/4265352), либо для более сложных ситуаций (динамических списков или аргументов, fe) вы может использовать функцию ['call_user_func()'] (https://secure.php.net/manual/en/function.call-user-func.php) с помощью 'array ($ this, $ function)' как своего первого аргумент. – axiac

ответ

0

Используйте следующий код:

$output3 = function3(function2(function1($input))); 

Или вы можете добавить ваше имя функции в массив и итерации по ней:

$input = ''; // some value 
$functioins = ('function1', 'function2', 'function3', 'function4'); 
foreach ($functions as $function) { 
    $input = $$function($input); 
} 
$output = $input; 

Если попытаться использовать общественные функции объекта, то:

public function encrypt($input) 
{ 
    // array with methods names 
    $methods= array('subBytes', 'shiftRows', 'mixColumns', 'addRoundKey'); 
    foreach($methods as $method) 
    { 
     $input = $this->$method($input); 
    } 

    return($input); 
} 
+0

Редактировать: я обновил вопрос – Joostd

+0

И как это влияет на создание функционального конвейера? Вы можете с помощью этого метода подключать выходные данные каждой предыдущей функции со входом следующей функции. Хорошо, я взглянул на обновленный вопрос. –

+0

Попробуйте вторую версию для публичных функций объекта –

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