关于数组:PHP:将开关重写为类

PHP: Rewriting switch as class

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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
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 = '[email protected]';
        }
        array_push($default, $value);
}

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

1
2
3
4
$email_foo     = '[email protected]';
$email_bar     = '[email protected]';
$email_foobar  = '[email protected]';
$email_default = '[email protected]';

以及4种不同的数据阵列:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
$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
        )
    )

等。。。

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

1
2
3
4
5
6
7
8
9
10
11
12
13
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:

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


实际上,您可以使用$$符号创建动态变量:

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

但是我不知道你想做什么

  • 如果可以很容易地从某个东西计算,那么计算$email_something有什么意义?
  • 为什么要创建这些变量而不只是将其存储在数组中?