Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как не запутать в именах переменных, Не переусердствовал ли я? 
:(
    Опции темы
nns2009
  Дата 16.3.2011, 21:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 174
Регистрация: 1.2.2009

Репутация: нет
Всего: 1



Вопрос №1
При программировании на PHP возникла проблема: как не запутаться в именах переменных. Некоторое время я думал, почему такой проблемы не возникло в остальных языках программирования и пришёл к выводу, что это из-за того, что в PHP данные приходят из разных источников(куки, запрос, БД). И возникла идея начинать имя любой переменной с буквы, обозначающей, откуда эта переменная пришла:
r - переменная пришла из $_REQUEST
c - $_COOKIE
f - от facebook'а
db - MySQL
d - какое-то значение по умолчанию
p - параметр в функции
Хорошо ли это? Если нет, то какие альтернативы?

Вопрос №2
Нормально ли, ради того чтобы не запутаться, куски кода, выполняющиеся в программе только один раз выносить в отдельный класс? (код из Вопроса №3)
Вопрос №3
Чтобы вдруг не опечататься, можно некоторые строки выносить в отдельные переменные - если что, получим ошибку сразу(такой переменной не существует), а не будем долго её искать, но не переусердствовал ли я:
Код

<?php

class User
{
    var $id;
    var $fId;
    var $surname;
    var $name;
    var $settings;
    
    function User ($pFId, $pSurname, $pName)
    {
        global $dSettings, $dbTableUsers, $dbTableUsersFieldId, $dbTableUsersFieldFId, $dbTableUsersFieldSurname, 
            $dbTableUsersFieldName, $dbTableUsersFieldSettings;
        
        $this->fId = $pFId;
        $this->surname = $pSurname;
        $this->name = $pName;
        
        $dbCurrentUser = mysql_query("SELECT * FROM $dbTableUsers WHERE $dbTableUsersFieldFId='" . $this->fId . "'");
        if (mysql_num_rows($dbCurrentUser) == 0)
        {
            mysql_query("INSERT INTO $dbTableUsers ($dbTableUsersFieldFId, $dbTableUsersFieldSurname, $dbTableUsersFieldName, $dbTableUsersFieldSettings) 
                VALUES ('" . $this->fId . "', '" . $this->surname . "', '" . $this->name . "', '" . $dSettings . "')");
            
            $dbCurrentUser = mysql_query("SELECT * FROM $dbTableUsers WHERE $dbTableUsersFieldFId='" . $this->fId . "'");
        }
        
        $this->id = mysql_result($dbCurrentUser, 0, $dbTableUsersFieldId);
        $this->settings = mysql_result($dbCurrentUser, 0, $dbTableUsersFieldSettings);
    }
}

?>

PM MAIL   Вверх
Evghenusi
Дата 16.3.2011, 22:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


майский жук
**


Профиль
Группа: Участник
Сообщений: 506
Регистрация: 3.8.2006
Где: Молдова, Кишинёв

Репутация: 6
Всего: 15



Вопрос №1 
неужели это самый глобальный вопрос который вас посетил при программировании на php?

Вопрос №2
вы не спрашивали у любителей ассемблера, как они программируют не путаясь?
PM WWW   Вверх
SneG0K
Дата 16.3.2011, 22:32 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Max Mara
***


Профиль
Группа: Завсегдатай
Сообщений: 1887
Регистрация: 1.12.2007
Где: Wis Dells

Репутация: 7
Всего: 54



Попробуйте каждый источник данных описать классом.

Никогда не задумывался над этим

Добавлено @ 22:33
Глобальные переменные - зло.
Попробуйте использовать паттерн Registry

Добавлено @ 22:34
Код

class User
{
    var $id;
    var $fId;
    var $surname;
    var $name;
    var $settings;
    
    function User ($pFId, $pSurname, $pName)
    {
        global $dSettings, $dbTableUsers, $dbTableUsersFieldId, $dbTableUsersFieldFId, $dbTableUsersFieldSurname, 
            $dbTableUsersFieldName, $dbTableUsersFieldSettings

Че за ху*ня???
Попробуйте использовать конструктор, и передавать все эти глобальные переменные в конструктор.

Сочувствую тому, кто будет это поддерживать!

Это сообщение отредактировал(а) SneG0K - 16.3.2011, 22:36
PM WWW Skype   Вверх
Muerto
Дата 16.3.2011, 23:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1207
Регистрация: 23.9.2006

Репутация: 3
Всего: 4



nns2009, Имена выходят не читабельные
Я не люблю черточки но в твоем случае может стоит подумать над $p_
$c_  
и тп. может читабельный будет

Это сообщение отредактировал(а) Muerto - 17.3.2011, 01:46


--------------------
user posted image
PM MAIL   Вверх
bars80080
Дата 16.3.2011, 23:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 71
Всего: 315



сама идея использовать глобальные переменные ужасна. в этом случае вообще не понятно зачем локализовать какой-то код в классе или функции

Добавлено через 1 минуту и 51 секунду
Цитата(nns2009 @  16.3.2011,  20:38 Найти цитируемый пост)
Вопрос №2
Нормально ли, ради того чтобы не запутаться, куски кода, выполняющиеся в программе только один раз выносить в отдельный класс? 

есть такая отличная мысль: если что-то делаешь, то понимать зачем.
вы можете для себя обосновать необходимость использования класса?
если нет, то зачем он вам?
PM MAIL WWW   Вверх
Muerto
Дата 17.3.2011, 01:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1207
Регистрация: 23.9.2006

Репутация: 3
Всего: 4



nns2009,  я решил глянуть что у тя там за глобальные переменные...
Ты там понапихал что попало... стоит почистить... а то оч плохо смотрится и воспринимается...

Сделай оберточный класс ака Wrapper для базы данных , или скачай...

Много лишнего кода, отсутствие логики , к примеру твой User не имеет других методов кроме конструктора но зачем то задаются поля

Это сообщение отредактировал(а) Muerto - 17.3.2011, 01:50


--------------------
user posted image
PM MAIL   Вверх
nns2009
Дата 17.3.2011, 14:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 174
Регистрация: 1.2.2009

Репутация: нет
Всего: 1



Цитата(SneG0K @  16.3.2011,  22:32 Найти цитируемый пост)
Попробуйте каждый источник данных описать классом.

Попробую.
Цитата(bars80080 @  16.3.2011,  23:46 Найти цитируемый пост)
сама идея использовать глобальные переменные ужасна.

Я понимаю, но тогда как вы предлагаете определять поля в таблице и имя самой таблицы? Хорошо ли определять их как-то так:
Код

<?php
final class db
{ 
   const tableUsersFieldSurname = 'surname';
   const tableUsersFieldName = 'name';
   const tableUsersFieldSettings = 'settings';
   ...
}
?> 

Если нет, то как вы посоветуете?

Цитата(bars80080 @  16.3.2011,  23:46 Найти цитируемый пост)
вы можете для себя обосновать необходимость использования класса?

Да - чтобы не запутаться.
Цитата(Muerto @  17.3.2011,  01:49 Найти цитируемый пост)
Много лишнего кода, отсутствие логики , к примеру твой User не имеет других методов кроме конструктора но зачем то задаются поля

Это пока, а User как раз для того и нужен, чтобы заполнить эти поля.
PM MAIL   Вверх
bars80080
Дата 17.3.2011, 14:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 71
Всего: 315



Цитата(nns2009 @  17.3.2011,  13:25 Найти цитируемый пост)
Если нет, то как вы посоветуете?

а как связаны последний вариант и первичный?
в первом случае вы вставляете глобальные переменные, подразумевая, что данные в эти переменные будут приходить из вне. в последнем случае константы, то есть вы жёстко фиксируете их с самого начала.
это совсем разные вещи

если  эти данные не меняются, то можно их записать в теле класса. если меняются, то надо обеспечить их ввод, что легко делается через конструктор

Код

class User {
    var $settings;
    
    function User ($param = array()) {
        $this->settings['id'] = (isset($param['id'])) ? intval($param['id']) : 0;
        $this->settings['fid'] = (isset($param['fid'])) ? intval($param['fid']) : 0;
        $this->settings['surname'] = (isset($param['surname'])) ? $param['surname'] : '';
        $this->settings['tableusers'] = (isset($param['tableusers'])) ? $param['tableusers'] : 'defaultname_tableusers';

и так далее. 

в результате мы можем при создании объекта из этого класса всегда поменять входные данные
PM MAIL WWW   Вверх
nns2009
Дата 17.3.2011, 15:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 174
Регистрация: 1.2.2009

Репутация: нет
Всего: 1



А что насчёт глобальных констант?
PM MAIL   Вверх
bars80080
Дата 17.3.2011, 20:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 71
Всего: 315



а что с ними не так?
PM MAIL WWW   Вверх
SneG0K
Дата 19.3.2011, 22:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Max Mara
***


Профиль
Группа: Завсегдатай
Сообщений: 1887
Регистрация: 1.12.2007
Где: Wis Dells

Репутация: 7
Всего: 54



Что вы хотите?
PM WWW Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0678 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.