1

我有以下课程:

  class countries {
        protected $_table = 'countries';

        public function __construct() {
            $this->mysqli = new mysqli(db_host, db_user, db_pass, db_name);
        }

        public function dropdown_menu() {
            $query = "SELECT * FROM $this->_table ORDER BY name ASC";
            $result = $this->mysqli->query($query) or die ($this->mysqli->error);

            while ($row = $result->fetch_array(MYSQLI_ASSOC))
            {
                $results[] = array('iso' => $row['iso'], 'name' => $row['name'], 'flag' => $row['flag']);
            }
        }
    }

当我在课外使用时:

    $countries = new countries();
    $countries->dropdown_menu();
    $results = $countries;

    foreach($results as $xresult)
    {
        $template->newBlock('dropdown_menu');
        $template->assign('iso', $xresult['iso']);
    }

这行不通。当我使用

    foreach($results as $xresult)
    {
        $template->newBlock('dropdown_menu');
        $template->assign('iso', $xresult['iso']);
    }

在 dropdown_menu 函数的类内部,它可以工作。

类外的 print_r ($results) 给出以下结果:

countries Object ( [_table:protected] => countries [mysqli] => mysqli Object ( ) )

我如何在课堂外使用 $results?

4

2 回答 2

3

在您的班级中创建一个新的 $results 字段

protected $results;

为您的班级中的 $results 定义一个 getter 方法...

public function getCountries() {
    return $this->results;
}

并使用它将您的数组分配给 $results 变量。

$results = $countries->getCountries();

或者,您也可以在 dropdown_menu() 方法中返回结果。

public function dropdown_menu() {
    $query = "SELECT * FROM $this->_table ORDER BY name ASC";
    $result = $this->mysqli->query($query) or die ($this->mysqli->error);

    $results = array();

    while ($row = $result->fetch_array(MYSQLI_ASSOC))
    {
        $results[] = array('iso' => $row['iso'], 'name' => $row['name'], 'flag' => $row['flag']);
    }

    return $results;
}

并且$results = $countries->dropdown_menu();会给你结果。

于 2013-01-04T23:53:00.657 回答
0

dropdown_menu()返回$results[]$results作为班级的公共成员。

于 2013-01-04T23:48:29.330 回答