1

我构建了一个函数来向数组收取一些值。问题是我需要从另一个函数中获取该数组(在函数内部)。

不知道如何处理参数。

这是我为阵列充电的功能:

public function loadStates(){
    $states = array(
        "Buenos Aires" => "label label-success",
        "Catamarca" => "label label-info",
        "Chaco" => "label label-warning",
        "Chubut" => "label label-danger";
    );

    return $states;
}

这是另一个函数(我假装调用创建数组的函数,以便我可以加载要在当前函数中使用的数据):

public function countUsers() {
    //breadcrumb
    $this->data["states"] = loadStates();
    var_dump('$this->data["states"]');die();
    //$this->data['totUsers'] = UsersDs::getInstance()->count();
    //$this->parser->parse('admin/usuarios/totales/totalRegUsers.tpl',$this->data);
} 

这些函数在同一个 php 文件中。我已经删除了所有函数参数,所以显然这不起作用

4

2 回答 2

1

你在这里有几个选择....

1) 从第一个函数返回数组

public function loadStates(){
return array(
    "Buenos Aires" => "label label-success",
    "Catamarca" => "label label-info",
    "Chaco" => "label label-warning",
    "Chubut" => "label label-danger";
             );
}

这将在每次调用 loadStates 时重新创建并返回一个数组。

2)在函数中使用静态赋值然后返回。

public function loadStates(){
static $states = array(
    "Buenos Aires" => "label label-success",
    "Catamarca" => "label label-info",
    "Chaco" => "label label-warning",
    "Chubut" => "label label-danger";
             );
    return $states;
}

这将在第一次调用函数时创建数组,并在后续调用中返回存储的副本。

3)在构建对象期间将 $states 分配给属性并使用属性访问器获取数组

public function __construct(){
$this->states = array(
    "Buenos Aires" => "label label-success",
    "Catamarca" => "label label-info",
    "Chaco" => "label label-warning",
    "Chubut" => "label label-danger";
             );
}

然后在你的代码中

$this->data["states"] = $this->states();

4)在构造时懒加载静态属性。

static protected $states;

public function __construct(){
if (!is_array(self::$states)) 
    self::$states = array(
    "Buenos Aires" => "label label-success",
    "Catamarca" => "label label-info",
    "Chaco" => "label label-warning",
    "Chubut" => "label label-danger";
    );
}

然后,当您想从使用语法中访问该属性时,如下所示:

self::$states["Buenos Aires"]

还有其他几个选项,但应该使用哪一个完全取决于您的特定用例。

于 2013-09-11T18:55:13.427 回答
1

你有两个我立即看到的选项(真的有更多,但很难知道你的情况下什么是最好的)。您可以通过引用方法传递数组,也可以从loadStates()方法返回新数组。

方法一:通过引用传递

public function loadStates(&$arr) {
    $arr = array(
        "Buenos Aires" => "label label-success",
        "Catamarca" => "label label-info",
        "Chaco" => "label label-warning",
        "Chubut" => "label label-danger"
    );
}

public function countUsers(){
    $this->loadStates($this->data["states"]);
    var_dump($this->data["states"]);die();
} 

方法二:返回新数组

public function loadStates() {
    return array(
        "Buenos Aires" => "label label-success",
        "Catamarca" => "label label-info",
        "Chaco" => "label label-warning",
        "Chubut" => "label label-danger"
    );
}

public function countUsers(){
    $this->data["states"] = $this->loadStates();
    var_dump($this->data["states"]);die();
} 
于 2013-09-11T18:17:45.223 回答