Проблема установки переменной сеанса в конструкторе класса - PullRequest
1 голос
/ 22 июля 2011

Я попал в PHP всего несколько месяцев назад и уже несколько недель занимаюсь объектно-ориентированным PHP.Я думаю, у меня все в порядке.

Я написал Table Class, который преобразует запрос в таблицу с разбивкой на страницы, сортировкой и т. Д.

Все это работает довольно хорошо, за исключениемодна маленькая вещь, и это - я хочу, чтобы переменная $ _SESSION ['TABLE_ORDERBY'] по умолчанию была установлена ​​при создании экземпляра класса Table.

Теперь я устанавливаю это так в конструкторе:

$_SESSION['TABLE_ORDERBY'] = $this->_arr_fetched_row_headers[1];

Когда я заменяю $ this -> _ arr_fetched_row_headers [1] на строку типа «NewsDate».Он работает (сначала я должен начать новый сеанс).

Как бы я мог сделать так, чтобы он мог автоматически устанавливать переменную сеанса с помощью $ this -> _ arr_fetched_row_headers [1]?

$ arr_fetched_rows, используемый методом processQuery ():

Array ( [0] => Array ( 
[0] => NewsID [1] => NewsTitle [2] => NewsDate ) 
[1] => Array ( [0] => 1753 [1] => Test2 [2] => 2011-07-05 15:26:38 ) 
[2] => Array ( [0] => 1754 [1] => Test3 [2] => 2011-07-05 15:26:51 ) 
[3] => Array ( [0] => 1755 [1] => Test4 [2] => 2011-07-05 15:26:51 ) 
[4] => Array ( [0] => 1756 [1] => Test5 [2] => 2011-07-19 08:44:13 ) 
[5] => Array ( [0] => 1758 [1] => Test8 [2] => 2011-07-19 08:44:38 )
etc......
[count_all_rows] => 14 )

Table.class.php (показывает только несколько методов)

<?php
class Table
{
    /* construct */
    public function __construct()
    {
        // initialise max_result
        if(isset($_POST['maxresult'])) {
            $_SESSION['TABLE_MAXRESULT'] = $_POST['maxresult'];
        }
        if(!isset($_SESSION['TABLE_MAXRESULT'])) {
            $_SESSION['TABLE_MAXRESULT'] = 5;
        }

        // initialise pagination
        if(!isset($_SESSION['TABLE_FROM'])) {
            $_SESSION['TABLE_FROM'] = 0;
        }
        if(isset($_GET['page'])) {
            $_SESSION['TABLE_FROM'] = $_GET['page'] * $_SESSION['TABLE_MAXRESULT'] - $_SESSION['TABLE_MAXRESULT'];;
        }
        if(!isset($_GET['page'])) {
            $_GET['page'] = 1;
        }

        // initialise sorting
        if(isset($_GET['sort']) && $_GET['sort'] == 'asc' && isset($_GET['sortby'])) {
            $_SESSION['TABLE_ORDERBY'] = $_GET['sortby'];
            $_SESSION['TABLE_ORDER'] = 'ASC';
        }
        if(isset($_GET['sort']) && $_GET['sort'] == 'desc' && isset($_GET['sortby'])) {
            $_SESSION['TABLE_ORDERBY'] = $_GET['sortby'];
            $_SESSION['TABLE_ORDER'] = 'DESC';
        }
        if(!isset($_SESSION['TABLE_ORDERBY']) ||  !isset($_SESSION['TABLE_ORDER'])) {
            $_SESSION['TABLE_ORDERBY'] = $this->_arr_fetched_row_headers[1];
            $_SESSION['TABLE_ORDER'] = 'DESC';
        }

    }

    public function processQuery($arr_fetched_rows)
    {
        // define the $this->_arr_fetched_rows property
        $this->_arr_fetched_rows = $arr_fetched_rows;

        // extract the row headers from $this->_arr_fetched_rows
        $this->_arr_fetched_row_headers = $this->_arr_fetched_rows[0];

        // count the row headers in $this->_arr_fetched_row_headers
        $this->_count_row_headers = count($this->_arr_fetched_row_headers);

        // count the total amount of rows from $this->_arr_fetched_rows
        $this->_count_all_rows = $this->_arr_fetched_rows['count_all_rows'];

        // count keys in $this->_arr_fetched_rows, subtract by 2 because of row headers and count_all_rows
        $this->_count_fetched_rows = count($this->_arr_fetched_rows) - 2;

        // create a new array without the row headers and without count_all_rows
        for($i = 1; $i <= $this->_count_fetched_rows; $i++) {
            $this->_arr_sent_rows[] = $this->_arr_fetched_rows[$i];
        }
    }

    *** edited out other methods ***

    // show table
    public function showTable()
    {
        // return the built table
        return $this->buildTable();
    }
}

Index.php

<?php
require_once 'class/Session.class.php';
require_once 'class/Query.class.php';
require_once 'class/Table.class.php';

$session = new Session();
$query = new Query();
$table = new Table();

$result = $query->selectQuery("NewsID, NewsTitle, NewsDate", "tbl_news", "ORDER BY " . $_SESSION['TABLE_ORDERBY'] . " " . $_SESSION['TABLE_ORDER'] . " LIMIT " . $_SESSION['TABLE_FROM'] . ", " . $_SESSION['TABLE_MAXRESULT'] . " ");

$table->processQuery($result);
$table->renameHeaders('NieuwsID, Nieuwstitel, Publicatiedatum, Bewerk, Verwijder');
$table->showCheckEditDelete(true, true, true);
$table->hideRowID(true);
$table->enableSort(true);
?>
<?php echo $table->showTable(); ?>

1 Ответ

1 голос
/ 22 июля 2011

Ваша последовательность событий:

$table = new Table();
...
$table->processQuery($result);

processQuery - это функция, которая устанавливает _arr_fetched_row_headers, но вы уже пытались использовать ее в конструкторе таблицы (new Table фактически вызывает функцию __construct.)

Проблема в последовательности событий.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...