【问题标题】:PHP: Rewriting switch as classPHP:将开关重写为类
【发布时间】:2014-06-19 16:03:53
【问题描述】:

所以,我在 foreach 循环中有一个 switch 语句,它检查数组中字段的值,并使用该值为每个唯一值构建一个命名数组和电子邮件地址变量。问题在示例代码下方。

例如,如果值为 foo、bar 和 foobar,则会发生以下情况:

switch($value['value']) {
    case 'foo':
        if(!isset($foo)){
            $foo = array();
        }
        if(!isset($email_foo)){
            $email_foo = convert_to_email($value['value']);
        }
        array_push($foo, $value);
    break;
    case 'bar':
        if(!isset($bar)){
            $bar = array();
        }
        if(!isset($email_bar)){
            $email_bar = convert_to_email($value['value']);
        }
        array_push($bar, $value);
    break;
    case 'foobar':
        if(!isset($foobar)){
            $foobar = array();
        }
        if(!isset($email_foobar)){
            $email_foobar = convert_to_email($value['value']);
        }
        array_push($foobar, $value);
    break;
    default:
        if(!isset($default)){
            $default = array();
        }
        if(!isset($email_default)){
            $email_default = 'this@isemail.com';
        }
        array_push($default, $value);
}

产生 4 个不同的电子邮件地址:

$email_foo     = 'foo@isemail.com';
$email_bar     = 'bar@isemail.com';
$email_foobar  = 'foobar@isemail.com';
$email_default = 'default@isemail.com';

还有 4 个不同的数据数组:

$foo = array(
    0 => array(
        'value' => 'F Oo',
        'name' => 'Janet',
        'age' => 23
        ),
    1 => array(
        'value' => 'F Oo',
        'name' => 'Doug',
        'age' => 42
        )
    )

$bar = array(
    0 => array(
        'value' => 'B Ar',
        'name' => 'James',
        'age' => 23
        ),
    1 => array(
        'value' => 'B Ar',
        'name' => 'Donald',
        'age' => 42
        )
    )

等等……

那么,问题来了: 是否可以编写一个可用于创建所有命名数组和电子邮件变量的类?有点像这样:

class Account_Manager_Build
{
public function __construct()
{
    if(!isset($this)){
        $this = array();
    }
    if(!isset("email_$this")){
        "email_$this" = convert_to_email($this->value['value']);
    }
    array_push($this, $this->value);
}
}

出于测试目的,以下是整个示例中使用的函数 convert_to_email:

function convert_to_email($input){
$returned = strtolower(substr($input, 0, 1)).strtolower(end(str_word_count($input, 2))).'@ismail.com';
return $returned;
}

【问题讨论】:

  • 使用您设计的示例,很难理解您实际上想要做什么。你能不能用更多的上下文来解释它,或者不用 foo/bar,而是用真实的例子来解释它?

标签: php arrays oop


【解决方案1】:

实际上,您可以使用$$ 表示法创建动态变量:

$variable = "email_$name";
$$variable = "something";

但是我不确定你要做什么

  1. 如果$email_something 可以很容易地计算出来,那么计算它的意义何在?
  2. 为什么要创建这些变量而不是将其存储在数组中?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-19
    • 2016-01-30
    • 2017-05-31
    • 2014-05-22
    相关资源
    最近更新 更多