【发布时间】:2016-03-09 08:41:50
【问题描述】:
是否可以在 php 的公共函数中使用公共函数?
我有一些公共函数可以改变输入并返回它。我想在循环我的函数的公共函数中创建一个 for 语句,例如:
$input
for= function1 -> output1 -> function2->output2->function3->output3.
我想将它的输出用于我的下一个函数。我的 for 循环中的 4 个函数也必须循环 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;
}
【问题讨论】:
-
public function blabla()表示类的方法。只要它不是static方法,就需要使用对象调用它。你不能只叫它subBytes(),你可能想要$this->subBytes()。在运行时生成函数名称时,您可以使用this answer 中提供的解决方案,或者,对于更复杂的情况(动态列表或参数,例如),您可以使用函数call_user_func(),将array($this, $function)作为其第一个参数。