PHP Class лучшие практики и структуры классов - PullRequest
0 голосов
/ 29 декабря 2011

В настоящее время я создаю простую CMS для моего небольшого веб-сайта на PHP5. Это мой первый «крупный» проект на PHP. Сначала я создаю необходимые классы, которые немного упростили бы мне работу, и вот я застрял. Мне нужно ваше мнение о следующей функции внутри моего UserInfo класса:

public function setUser($id) {
        if(!isset($id)) {
            return false;
        }

        session_start();
        $conn = new mysql($_SESSION['DBCONNINFO']);
        $sql = "SELECT
                usr.ID,
                usr.USERNAME as TUSERNAME,
                usr.FIRST_NAME,
                usr.LAST_NAME,
                usr.PHONE,
                usr.MOBILE,
                usr.EMAIL,
                usr.ADDITIONAL_INFO,
                usr.LAST_LOGIN_DATE,
                usr.USER_GROUP_ID
                FROM cms_users usr
                WHERE usr.id = " . $id;

        $result = $conn->query_cust($sql);
        $conn=null;

        foreach ($result as $row) {
            $this->id = $row['usr']['ID'];
            $this->username = $row['usr']['TUSERNAME'];
            $this->firstname = $row['usr']['FIRST_NAME'];
            $this->lastname = $row['usr']['LAST_NAME'];
            $this->phone = $row['usr']['PHONE'];
            $this->mobile = $row['usr']['MOBILE'];
            $this->email = $row['usr']['EMAIL'];
            $this->additional_info = $row['usr']['ADDITIONAL_INFO'];
            $this->last_login_date = $row['usr']['LAST_LOGIN_DATE'];
            $this->user_group = $row['usr']['USER_GROUP_ID'];
        }

        return true;
    }  

Правильно ли я делаю это, я не говорю о синтаксисе, сейчас я сосредоточен на структуре классов, дизайне и лучших практиках - любое мнение будет оценено.

Могу ли я вызвать session_start(), например, в конструкторе класса и использовать переменные внутри него, не вызывая его каждый раз в функции!?

Должен ли я закрыть соединение с БД с помощью функции close() или $conn=null приемлемо??

Это плохая практика хранить информацию базы данных в классе сеанса!? Если да, где хранить его как глобальную переменную - $ _GLOBAL!?

Если в течение 5 минут для чайников существует «PHP-структура для тренировок», пожалуйста, сообщите мне:)

Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 29 декабря 2011

Не имеет большого смысла извлекать данные из базы данных для каждого запроса, если вы все равно используете сеансы.В каком случае, почему session_start () вызывается внутри метода setUser ()?

И мы не можем прокомментировать структуру класса, когда вы предоставили только один метод.

Кроме того, поскольку представление данных, выходящих из PHP, должно соответствовать субстрату, куда эти данные направляются (чтобы предотвратить внедрение SQL, внедрение заголовка электронной почты, CSS ...), тогда рекомендуется отложить изменения представления данных.до момента, когда он покидает PHP.например,

$sql = "SELECT
       ....
            WHERE usr.id = " . mysql_real_escape_string($id);

(или использовать связанные параметры)

Однако, поскольку пользователи обычно идентифицируют себя по имени пользователя, а не по их идентификатору пользователя, это скорее означает, что $ id был получен не из предоставленного пользователемданные - в каком случае, где?И почему вы используете его в качестве идентификатора, если у вас уже есть идентификатор для сеанса (где эти данные должны храниться).

Или вы хотите использовать этот класс для обработки данных, относящихся кпользователям, отличным от пользователя текущего сеанса - в этом случае нет возможности , что там должен быть session_start ().

Извините, но это не очень хорошо продуманокод и не очень хорошо поставленный вопрос.

Кстати, установка нулевого соединения не закрывает соединение с базой данных.

0 голосов
/ 29 декабря 2011

Используйте define для определения всех ваших констант.
Например:

define('DBCONNINFO', "something");

Также вам нужно всего лишь один раз вызвать session_start(), это можно сделать в любом месте вашего скрипта.

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