4

我正在使用 PHP 5.3 和 extract() 函数。

这是我正在构建的一个类的简单示例:

private api_username;
private api_password;
private api_signature;
private version = '63.0';

public function __construct($credentials) {
    extract($credentials);

    $this->api_username = $api_username;
}

问题是提取后,我必须一一遍历变量并将它们分配给类变量。

有没有办法直接提取到类变量,所以我不必逐项分配?

4

3 回答 3

13

如果$credentials数组的键与私有变量的名称完全匹配,则可以使用变量变量来完成此操作(将键作为变量)。

public function __construct($credentials) {
    foreach($credentials as $key => $value) {
        $this->$key = $value;
    }
}

不过,请确保您传入的数组具有正确的键。

于 2013-09-23T22:49:46.300 回答
1

这可能不安全,并且您使用的方法与大多数公认的模型背道而驰,但是:

foreach ( $credentials as $key => $value ) {
    if ( property_exists($this,$key) ) {
        $this->$key = $value;
    }
}
于 2013-09-23T22:51:56.907 回答
0

你可以试试这个:

extract($credentials, EXTR_REFS);
foreach ($credentials as $key => $value) {
      $this->$key = $$key;
}
于 2013-09-23T22:58:13.727 回答