[英]Setup a hook inside functions to use within another function
我正在尝试在函数中设置IF语句,以确定是否正在使用外部函数。 我想我的问题可以走一种方法..我如何在外部函数(app1,app2)中设置钩子以构建IF语句呢? 把它们包起来吗? 如果是这样,我该如何构造该语句?
至少从我的PHP知识水平来看,这种逻辑似乎没有任何意义。 这样做的目的是,我有2个函数(app1和app2),每个函数为两个单独的管理面板创建一组不同的选项。 每个面板中选项的构造函数和标记都是相同的,这将在“包装器”函数中进行。 但是目前,必须使用两个单独的“包装器”函数来处理此问题。 Panel1的一个功能,Panel2的另一个功能。
因此,我不得不将两个包装器功能组合在一起,因为拥有两个基本相同功能的独立功能是多余的。 这是代码的摘要。 如您所见,每一个的唯一区别是“ $ panel_type = ...”位
function app1() {
$app1_options = array();
$app1_options[] = array(
'type' => 'text',
'name' => 'Text Field',
'id' => 'text_field_one'
);
return $app1_options;
}
function app2() {
$app2_options = array();
$app2_options[] = array(
'type' => 'text',
'name' => 'Text Field',
'id' => 'text_field'
);
return $app2_options;
}
function wrapper_panel1() {
$panel_type = app1();
foreach( $panel_type as $value ) {
switch ( $value[ 'type' ] ) {
case 'text':
// input stuff
break;
}
}
}
function wrapper_panel2() {
$panel_type = app2();
foreach( $panel_type as $value ) {
switch ( $value[ 'type' ] ) {
case 'text':
// input stuff
break;
}
}
}
因此,我们确实在寻找某种方式将这两个功能合并在一起,例如:
function wrapper() {
if ( app1() ) {
$panel_type = app1();
}
if ( app2() ) {
$panel_type = app2();
}
foreach( $panel_type as $value ) {
switch ( $value[ 'type' ] ) {
case 'text':
// input stuff
break;
}
}
}
可以为此设置类/对象吗? 或可以实现此目标的任何类型的更改。
非常感谢您可以为此提供的任何帮助。 谢谢!
只需将应用程序ID传递给包装函数即可:
function wrapper_panel ($appId) {
$optsFunc = 'app'.$appId;
$panel_type = $optsFunc();
foreach( $panel_type as $value ) {
switch ( $value[ 'type' ] ) {
case 'text':
// input stuff
break;
}
}
}
// In app1:
wrapper_panel(1);
// In app2:
wrapper_panel(2);
...或者更好的是,在调用时将选项传递给包装函数:
function wrapper_panel ($panel_type) {
foreach( $panel_type as $value ) {
switch ( $value[ 'type' ] ) {
case 'text':
// input stuff
break;
}
}
}
// In app1
wrapper_panel(app1());
// In app2
wrapper_panel(app2());
编辑
鉴于Wordpress施加的限制,我认为最简单,最不可怕的事情是从app1()
和app2()
函数内部调用wrapper_panel()
:
function app1() {
$app1_options = array();
$app1_options[] = array(
'type' => 'text',
'name' => 'Text Field',
'id' => 'text_field_one'
);
wrapper_panel($app1_options);
}
function app2() {
$app2_options = array();
$app2_options[] = array(
'type' => 'text',
'name' => 'Text Field',
'id' => 'text_field'
);
wrapper_panel($app2_options);
}
function wrapper_panel ($panel_type) {
foreach( $panel_type as $value ) {
switch ( $value[ 'type' ] ) {
case 'text':
// input stuff
break;
}
}
}
...并使用Wordpress(而不是wrapper_panel
函数)注册app1
和app2
函数。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.