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 に答える