Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Для профи > Правила хорошего кода


Автор: Wowa 2.4.2005, 15:13
Давайте тут собирать правила хорошего кода.

Например:
1. Не писать код работающий только с register_globals on. Вместо этого использовать $_GET[''] и $_POST['']
2. Не называть функции непонятными для посторонних именами
3. Делать комментарии в коде, чтобы можно было легко разобраться в нем.

Автор: Mal Hack 2.4.2005, 15:43
4. Отступы.
5. Минимум переменных необходимых для решения задачи.
6. У функций return
7. Вывод гипертекста - один раз.

Автор: HalkaR 2.4.2005, 23:02
8. Отделение ввода данных в базу от вывода гиперетекста

Автор: Mal Hack 2.4.2005, 23:12
Цитата(HalkaR @ 3.4.2005, 00:02)
8. Отделение ввода данных в базу от вывода гиперетекста

Я бы сказал: " отделение всего кода от вывода ьгипертекста". По сути шаблоны. Что скажешь?

Автор: yUAC 3.4.2005, 02:14
Кстати говоря насчет вывода текста один раз не могу согласиться - это неправильно.

Автор: Mal Hack 3.4.2005, 10:46
Цитата(yUAC @ 3.4.2005, 03:14)
Кстати говоря насчет вывода текста один раз не могу согласиться - это неправильно.

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

Автор: IZ@TOP 3.4.2005, 10:58
9. Краткость сестра таланта.
Пример:
Код

<?php
// Есть у нас такой кусок кода:
if($a == 1) {
   $b = $a;
} else {
   $b = 2;
}
// Можно сократить до:
$b = ($a == 1) ? $a : 2;
?>


10. Оптимизация строковых функций.
Пример:
Код

<?php
// Замена переменных в шаблоне
$text = ereg_replace("<!--a-->", $a, $text);
$text = ereg_replace("<!--b-->", $b, $text);
$text = ereg_replace("<!--c-->", $c, $text);
$text = ereg_replace("<!--d-->", $d, $text);
// Это по меньшей мере ужасно, но встречается очень часто. 
// Оптимизируем и получаем одну строку:
$text = str_replace(array('<!--a-->', '<!--b-->', '<!--c-->', '<!--d-->'), array($a, $b, $c, $d), $text);

// Разбивка текста всегда осуществляем с помощью explode,
// а не split'a как это очень часто делают некоторые неопытные люди. Т.е. такой код:
$arr = split("|", $line);
// Заменяем на 
$arr = explode("|", $line);
// Разумеется если вам необходимо разбить строку при помощи регулярных выражений,
// лучше всего сначала подумать: а может быть есть другой выход из ситуации?
?>


PS Пока все.

Автор: HalkaR 4.4.2005, 16:09
Цитата(Mal @ 2.4.2005, 23:12)
Цитата(HalkaR @ 3.4.2005, 00:02)
8. Отделение ввода данных в базу от вывода гиперетекста

Я бы сказал: " отделение всего кода от вывода ьгипертекста". По сути шаблоны. Что скажешь?

Полностью отделить код от html очень тяжело, но естественно желательно. Я просто более мягко сформулировал.

Автор: IZ@TOP 4.4.2005, 16:12
Слишком четкое отделение РНР кода от HTML приведет скорее всего к тому что появится еще один интерпретируемый язык, что приведет к большому снижению производительности.

Автор: Irokez 7.4.2005, 18:03
http://pear.php.net/manual/en/standards.php

Автор: Mal Hack 7.4.2005, 20:01
Irokez
это правила составления PEAR.

Автор: Irokez 7.4.2005, 20:07
Mal Hack smile ну да я знаю ... а он на чем пишется? на пхп ...
по-моему стандарты написания пеар пакетов стоит взять за стандарты написания всех пхп скриптов ...

Автор: Mal Hack 7.4.2005, 20:12
Irokez
я к тому, как бы что там описывается схема структура файла PEAR

Автор: Irokez 7.4.2005, 20:20
Mal Hack
так пеар файл и есть ни что иное как грамотно написанный пхп скрипт,
и по ссылке описываются как такой скрипт грамотно написать (в плане синтаксиса)

Автор: Mal Hack 7.4.2005, 20:32
Цитата(Irokez @ 7.4.2005, 21:20)
так пеар файл и есть ни что иное как грамотно написанный пхп скрипт,

не факт. Многие считаю его тяжелым smile

Цитата(Irokez @ 7.4.2005, 21:20)
и по ссылке описываются как такой скрипт грамотно написать (в плане синтаксиса)

Я имею ввиду (может и ошибаюсь) имел ввиду что класс должен называться так-то, сожеражть обязательно определенные свойства и методы..

Автор: Irokez 7.4.2005, 20:36
Mal Hack
да нет там такого:
Цитата
Chapter 4. Coding Standards

стандарты написания кода, а не класса, т.е. как правильно код написать

Автор: Mal Hack 7.4.2005, 21:45
Звиняй, не прав я был. Раньше этого не замечал.

Автор: Irokez 8.4.2005, 19:13
smile звиняю

Автор: Рыжий 30.4.2005, 23:57
можно так же писать все константы прописными буквами - это как общепринятное правило уже стало smile

Автор: Илья 9.6.2005, 10:09
Цитата(IZ @ 3.4.2005, 10:58)
10. Оптимизация строковых функций.
Пример:
Код

<?php
// Разбивка текста всегда осуществляем с помощью explode,
// а не split'a как это очень часто делают некоторые неопытные люди. Т.е. такой код:
$arr = split("|", $line);
// Заменяем на 
$arr = explode("|", $line);
?>

Split и Explode две совершенно разные функции. И утверждать что тот кто использует Split - неопытный человек, полный бред. ;)

Автор: Opik 9.6.2005, 10:34
Илья
чаще всего так... обычно split приименяют необоснованно..

Автор: IZ@TOP 9.6.2005, 11:53
Илья, есть куча примеров, хотя бы на данном форуме smile А еще знаю человека который преподает в неком учебном учреждении, на платной основе, РНР, что такое explode он незнает smile

Я сколько не делал всевозможных скриптов, ну нигде я не нашел применения этой функции smile

Автор: Ринат 3.10.2005, 05:22
IZ@TOP
explode не приходилось юзать? smile

Автор: IZ@TOP 4.10.2005, 10:48
Ринат, прочти тему с начала, потом разбегись и ... об стену - разбег 100 метров smile

Автор: Alone 6.10.2005, 10:32
Я считаю, отделение логики от гипертекста - совсем не в тему.
Топик создавался для сбора примеров правил хорошего кода.

Со своей стороны могу подчеркнуть некоторые моменты, которых я придерживаюсь:

таб - пробелами, 4 символа
класс - имя класса и его конструктора с большой буквы, верблюжьим стилем ( ExampleClass() )
методы - с маленькой, верблюжьим стилем ( theMethod() )
переменные - в основном с маленькой буквы, через подчеркивание ($the_variable)
фигурные скобки - ВЕЗДЕ(!) в одной строке с оператором/функцией/итд... пример
Код

function a(){
    if($z){
        $a=1;
    } else {
        $a=0;
   }
}

документирование кода - ОБЯЗАТЕЛЬНО! все классы, их методы, переменные...
константы - большими буквами
дефайны - тоже.
в строках, при использовании переменных, обязательно выделяю их вот так
Код

$str="Hello ".$name."! I see you!";


require/include - в скобках. это больше для красоты. require_once("MyClass.php");

А вот чего никак не возьму в привычку, так это пробелы вокруг знака =
smile

Автор: IZ@TOP 10.10.2005, 13:49
Мне нравятся упрощенные конструкции условий использовать:

Код

$a = (is_numeric($b)) ? $b : 0;

Добавлено @ 13:54
А в остальном полностью поддерживаю Alone, ну, за исключением пробелов, я вставляю до и после знака =.

Автор: Bikutoru 10.10.2005, 14:57
Полностью согласен с Alone, делаю почти один в один. Единственное исключение, так это
Код

function a()
{
    if($z)
    {
        $a=1;
    } 
    else //Любая { или } на отдельной строке
    {
        $a=0;
    }
}

Исключительно ради наглядности smile
Ну и в обязательном порядке пробелы вокруг = + - * / & && | || == != > < >= <=

Автор: AntonioBanderaz 13.10.2005, 23:06
IZ@TOP
Да мне тоже нравятся упр констр, но не все их понимают.
Если для себя - можно, а если для кого-то?

Коментировать каждую функцию, что делает, что на входе, что на выходе.
Созавать в каждом классе пример использования (закоментированый)

+ ко всему... Не знаю относится это к правилам хорошего кода, но что правила - точно.
не объединять при выводе длинные строки, время выполнения увеличивается
Т.е.
Код

echo $str1.'fghgfh'.$str2;
//аналогично
print("$str1 sdgfsdgdsg $str2");

//заменяем на
echo $str1;
echo 'fghgfh';
echo $str2;

print("$str1 sdgfsdgdsg ");
print($str2);



забыть про exec и system!

Автор: o.s.a. 16.10.2005, 21:05
Цитата(Bikutoru @ 10.10.2005, 16:57)
Ну и в обязательном порядке пробелы вокруг = + - * / & && | || == != > < >= <=

Так некоторые умудряются еще и пробелы вокруг . ставить
Код

$str = "str" . $a . "str";
$str = "str".$a."str"; // я придерживаюсь такого стиля


Автор: Alone 19.10.2005, 13:54
Цитата(IZ @ 10.10.2005, 13:49)
А в остальном полностью поддерживаю Alone, ну, за исключением пробелов, я вставляю до и после знака =.

Я не хочу сказать что это излишне, я просто еще сам не привык везде ставить пробелы вокруг =
Тоесть правилом хорошего кода я это как раз считаю smile

А вдополнение ко всему сказанному я бы рекомендовал пользоваться http://www.zend.com
Умопомрачительная девелоперская среда! Подойдет как профессионалу, так и начинающему.
Главное не кипятиться при первых попытках работы с ней.smile
Да она тяжеловесная, потому как писана на яве, но в этом есть смысл. Но по своему удобству / функциональности она превосходит все остальные продукты, коих можно на пальцах перечислить.
Чего только стоит CodeCompletion! При обращении к объекту показывает все его методы и переменные.
А phpDocumentor! Если у вас в привычке есть пунктик - документировать все классы/методы/прочие_функции, то создание хтмл варианта документации разработчика состоит из 2-3 кликов.
В общем вот такие вот дела smile Если бы еще зенд покашлял немного денег мне за рекламу его продукта - я был бы счастлив smile

Автор: -=Ustas=- 19.10.2005, 14:18
А по мне, так удобнее (и красивее) пользовать Pear стандарты:
Код

function NameFunction()
{ // у функций скобы такие
    if ($z) { // а у конструкторов такие
        $a = 1;
    } else {
        $a = 0;
    }
}

switch ($var) {
    case ("bla"):
        $m = 0;
        break;
    case ("alb"):
        $m = 1;
        break;
}

// Классы аналогично функциям
class NameClass
{
    function NameFunction()
    { // у методов скобы такие
        if ($z) { // а у конструкторов такие
            $a = 1;
        } else {
            $a = 0;
        }
    }
}

Автор: AntonioBanderaz 24.10.2005, 13:36
Есть некоторые люди, которые ещё и дополнительный перенос строки ставят... )))

Автор: -=Ustas=- 24.10.2005, 14:21
Цитата(AntonioBanderaz @ 24.10.2005, 13:36)
Есть некоторые люди, которые ещё и дополнительный перенос строки ставят... )))

Т.е.?

Автор: Master 24.10.2005, 16:21
всем хай smile

Цитата
<?php
// Замена переменных в шаблоне
$text = ereg_replace("<!--a-->", $a, $text);
$text = ereg_replace("<!--b-->", $b, $text);
$text = ereg_replace("<!--c-->", $c, $text);
$text = ereg_replace("<!--d-->", $d, $text);
// Это по меньшей мере ужасно, но встречается очень часто.
// Оптимизируем и получаем одну строку:
$text = str_replace(array('<!--a-->', '<!--b-->', '<!--c-->', '<!--d-->'), array($a, $b, $c, $d), $text);

// Разбивка текста всегда осуществляем с помощью explode,
// а не split'a как это очень часто делают некоторые неопытные люди. Т.е. такой код:
$arr = split("|", $line);
// Заменяем на
$arr = explode("|", $line);
// Разумеется если вам необходимо разбить строку при помощи регулярных выражений,
// лучше всего сначала подумать: а может быть есть другой выход из ситуации?
?>


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

Код

<?php

// Замена переменных в шаблоне
$text = ereg_replace("<!--a-->", $a, $text);
$text = ereg_replace("<!--b-->", $b, $text);
$text = ereg_replace("<!--c-->", $c, $text);
$text = ereg_replace("<!--d-->", $d, $text);
// Это по меньшей мере ужасно, но встречается очень часто. 

// Оптимизируем и получаем одну строку:
$text = str_replace(array('<!--a-->', '<!--b-->', '<!--c-->', '<!--d-->'), array($a, $b, $c, $d), $text);

// Разбивка текста всегда осуществляем с помощью explode,
// а не split'a как это очень часто делают некоторые неопытные люди. Т.е. такой код:
$arr = split("|", $line);

// Заменяем на 
$arr = explode("|", $line);

// Разумеется если вам необходимо разбить строку при помощи регулярных выражений,
// лучше всего сначала подумать: а может быть есть другой выход из ситуации?

?>

Автор: AntonioBanderaz 25.10.2005, 13:52
Цитата
Т.е.?

Код

class tralaLA {

     var $tra;

     var $rara;

     function tralaLA() {
         
         //некоторые действия

         // Тоже действие

         //Etc...

     }
}

Добавлено @ 13:53
Если что пример могу скинуть в виде ссылки...

Автор: -=Ustas=- 25.10.2005, 14:07
AntonioBanderaz, жуть!!! smile Хоть и отступы есть, а читабельность нулевая! smile

Автор: AntonioBanderaz 28.10.2005, 19:28
Да я и сам испуг когда эт увидел...

Автор: wsr 14.1.2006, 00:17
Я лично при кодинге больших "приложений", предпочитаю пользоваться следующим:
Код

while ( ) :
         # вместо стандартной конструкции while () {} 
endwhile;

if ( ) :
         # вместо стандартной конструкции if () {} 
endif;

for ( ) :
         # вместо стандартной конструкции for () {} 
endfor;

switch ( ) :
         # вместо стандартной конструкции switch () {} 
endswitch;
         # вместо стандартной конструкции foreach () {} 
foreach ( ) :

endforeach;

По моему это лучший вариант для более удобного парсинга своего же кода в будущем!
А то будет в коде куча {{{{{{{ и }}}}}}}} и попробуй разберись что к чему относится, а так все четко и понятно!

Автор: IBSN 15.1.2006, 01:29
Позвольте, отделение пробелами - увеличивает читабельность, имхо...
1.
Код

if($a == "test") {
      echo "Test is: " . $a . "!";
}


2.
Код

$at = Array();
$ar = Array( Array() );
echo $ar[ $at[0] ][0];

Автор: IZ@TOP 16.1.2006, 02:14
wsr, мне кажется что эти конструкции немного устарели. А с фигурными скобками разбираться нет проблем - ставим Zend Studio и радуемся крестикам которые эти скобки группируют (скрывают, открывают).

Автор: Kefir 16.1.2006, 12:20
Изотоп, умм... вы меня извините, конечно, но зенд стоит 99-1499 баков стоит smile Но это так, к слову...
А вообще, хорошо оформленный код избавляет от проблемы различения '}'.
Свёртывание кода, имхо, вообще не должно влиять на удобочитаемость кода.
Да, и, кстати, насколько я помню комодо тоже свёртывает неплохо.

Автор: IZ@TOP 16.1.2006, 14:44
Kefir, кто чем пользуется. Я привык к зендовскому монстру, стоит да, но я пока "триал" юзаю (хи-хи). Правильно ты сказал - как напишешь, так и прочитаешь.

Автор: Janus 16.1.2006, 17:48
Многие редакторы могут сворачивать блоки (кажется, это называется "фолдеринг" или что-то типа этого). Например, Notepad++. Он к тому же идет под GNU GPL.

Автор: Mal Hack 16.1.2006, 19:19
ЗЕНД тоже с 5 версии сворачивает.

Автор: Janus 17.1.2006, 20:01
Тут говорилось о том, что он платный и я предложил бесплатную альтернативу.

Автор: CyClon 19.1.2006, 21:33
Где-то читал, что:
echo "My name is $name!";
Намного быстрее чем
echo "My name is".$name."!";
И быстрее чем:
echo "My name is {$name}!";

Автор: wsr 19.1.2006, 22:19
Цитата(CyClon @ 19.1.2006, 21:33 Найти цитируемый пост)

Где-то читал, что:
echo "My name is $name!";
Намного быстрее чем
echo "My name is".$name."!";
И быстрее чем:
echo "My name is {$name}!";


Быстрее но не значит лучше!
В дальнейшем, при парсинге кода гораздо легче в большом блоке данных найти echo "My name is".$name."!"; чем echo "My name is $name!";

Автор: Mal Hack 19.1.2006, 23:01
Самое быстрое и лучше - второй вариант, затем третий, затем первый.

Автор: Ciber SLasH 20.1.2006, 09:39
Я вот юзаю такой синтаксис:
1) если PHP-код идёт блоками с (X)HTML-кодом, то делаю так:
Код

<?
//-- BEGIN: php ----------------------------------------------------------------
$action = $_GET['action'];        // действие: index.php?action=buy — купить товар. И т.д. и т.п.
$act = explode(':', $action);    // действие: index.php?action=log:clear — очистить лог. И т.д. и т.п.
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
// Ниже как бы основной код, который выполняется всегда
$_title = 'Shop :: Main';
//-- END: php ------------------------------------------------------------------
?>
    <tr>
    <td id='navbar' style='display: none'>&nbsp;</td><!-- Для отображения — удалить атрибут "style" -->
    <td id='content'>
        <table id='priceList' align="center">
        <caption>Список товаров</caption>
        <thead>
            <tr><td colspan="2">Группа</td><td>Альбом</td><td>Год</td><td>Цена</td><td>ID</td></tr>
        </thead>
        <tbody>
<?
//-- BEGIN: php ----------------------------------------------------------------
// Другой PHP-блок
//-- END: php ------------------------------------------------------------------
?>

2) если есть какие-то структурированные массивы, то описываю их структуру в комментах:
Код

/* Пример массива:
    $order = array(
        // Смысл элементов: "Группа", "Альбом", "Год", "Цена", "ID"
        0 => array("Гражданская Оборона", "Вершки и корешки", "1989", "0.01 WMZ", "0"),
        1 => array("Гражданская Оборона", "Русское поле экспериментов", "1989", "0.01 WMZ", "1"),
        ...
    );
*/

3) отделяю некие псевдо-блоки кода, которые являются одной частью:
Код

$mrh_login = '';
$mrh_pass1 = '';

$inv_id = md5(uniqid(time()));    // номер счёта

4) комментарии начинаю с большой буквы, если они находятся в новой строке, иначе — с маленькой. Выравниваю комменты, если они находятся в ближайшей видимости:
Код

// Описание товара
$inv_desc = (count($order) == 1) ? $order[0][0] : 'Аудио-файлы (тестовый режим)';
$out_summ = 0;                    // сумма товара (инициализация)
$shp_id = '';                    // ID-товаров, строка вида: "ID0:ID1:ID2..."

5) отделяю пробелами символы операций (меньше, больше, присвоить значений и т.д.)
6) отделяю важные блоки так:
Код

//--[ Записываем инфу о заказе в файл ]-------------------------------------
$fp = fopen('./data/checks/'.$inv_id, 'wt');
flock($fp, LOCK_EX);
fwrite($fp, implode('|', $order_info));
flock($fp, LOCK_UN);
fclose($fp);
//-- END -------------------------------------------------------------------

// Иногда так, если не слишком много символов в заголовке
//--[ Отсылка письма ]----------------------------------------------------------
$e_mail = new Mail;
$e_mail->from = '';
$e_mail->to = $order_info[2];    // кому будем слать мессагу
$e_mail->subject = 'Shop :: Заказанные товары';
$e_mail->body = $e_content;    
for ($i = 0; $i < count($attach); $i++) {    // присоединяем файлы
    $e_mail->add_attachment('./data/'.$attach[$i]);
}
$e_mail->send();
//-- END: отсылка письма -------------------------------------------------------

7) описываю новые элементы с новой строки при определении массивов, но только если это логично для данных массива:
Код

$headers = array(
    'User-Agent: '.$_SERVER['HTTP_USER_AGENT'],
    'Accept: text/html, application/xml;q=0.9, application/xhtml+xml, image/png, image/jpeg, image/gif, image/x-xbitmap, */*;q=0.1',
    'Accept-Language: ru-ru,ru;q=0.8,en-us;q=0.5,en;q=0.3',
    'Accept-Encoding: deflate, gzip, x-gzip, identity, *;q=0',
    'Referer: http://'.$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF'],    // полный URL этой страницы
    'Content-Type: application/x-www-form-urlencoded',
    'Content-Length: '.strlen($post_data),
    'Connection: keep-alive'
);

8) функции описываю так:
Код

function funcName($a, $b) {
$c = 'zzz';
    if ($c == 'a') {
        $d = 'yyy';
        return true;
    }
return false;
}

9) для отступов юзаю табы в размере 4 знакоместа
10) строки с использованием переменных разбиваю:
Код

echo 'zzz'.$a.'yyyyy';

11) там, где не нужна обработка escape-последовательностей, юзаю одинарные кавычки для строк, иначе — двойные:
Код

echo 'zzz'.$a.'yyyyy';
echo "zzzzzz:\t".$a;

12) пишу код, который не зависит от register_globals, чем [новички (не все); люди которые не беспокоятся о безопасности; ленивые (которым пофигу); возможно ещё есть кто-то, кого я не включил в этот список] зачастую пренебрегают... а жаль
13) пишу в EditPlus, хотя как-нить обязательно прикуплю диск (конечно не лицензионный, денег таких нет, чтобы разбрасываться ими на такое добро) с Zend-ом

ЗЫ: кстати описывание комментариев по PEAR стандартам отличается в русской и английской доке:
ru: http://pear.php.net/manual/ru/standards.header.php
en: http://pear.php.net/manual/en/standards.header.php
Мне больше нравится так, как в английской доке smile

Автор: AztEK 20.1.2006, 12:55
Читал, что лучше использовать одинарные кавычки+конканетация переменных.

Автор: Janus 20.1.2006, 13:00
Так и есть. В этом случае не тратится лишнее время на разбор строки.

Автор: DENNN 20.1.2006, 13:06
Цитата(AztEK @ 20.1.2006, 12:55 Найти цитируемый пост)

Читал, что лучше использовать одинарные кавычки+конканетация переменных.

Видимо из тех соображений, что парсер не тратит время, выискивая переменные в двойных кавычках.

Автор: Древлянин 22.1.2006, 01:37
Цитата(Janus @ 20.1.2006, 13:00 Найти цитируемый пост)

Так и есть. В этом случае не тратится лишнее время на разбор строки.

Да, так было до 5-ой версии PHP, в 5-ой теперь обрабатывается одинаково быстро.

Автор: Ciber SLasH 22.1.2006, 01:48
Цитата(Древлянин @ 22.1.2006, 01:37 Найти цитируемый пост)

так было до 5-ой версии PHP

5-я версия, это конечно хорошо, но к великому сожалению большинство хостингов сидят на 4-ёрке. smile

Автор: wsr 23.1.2006, 01:15
Помоему сейчас тема с кавычками не особо актуальна, так как рано или поздно, но все равно все перейдут на PHP 5.
А там как известно "все" одинаково. ИМХО.

Автор: idler 28.2.2006, 13:37
Правила написания PEAR рулят однозначно!!!
Код получается красивый, понятный, быстрый и самодокументирующийся (PEAR::phpDocumentor)

Автор: CyClon 1.3.2006, 21:05
Мне PEAR не нравятся... Больше нравится такой стиль:

Код
if (eregi("mail.ru", $_POST['mail'])) {
    echo "Sorry...";
} else {
    header("Location: reg.php");
}


Код
function bb2html ($text) {
    str_replace("[b]", "<b>");
    str_replace("[/b]", "</b>");
}

Автор: -=Ustas=- 1.3.2006, 21:10
CyClon, лучше всего привыкать к общим используемым стандартам, нежели писать так как тебе нравится smile

Автор: Ciber SLasH 1.3.2006, 23:23
Цитата(-=Ustas=- @ 1.3.2006, 21:10 Найти цитируемый пост)
лучше всего привыкать к общим используемым стандартам, нежели писать так как тебе нравится smile

Не совсем согласен. У каждого прогера свой стиль программирования. Люди все разные... клоны пока не получили широкого распространения smile

Автор: Wowa 1.3.2006, 23:48

Цитата(CyClon @ 1.3.2006, 19:05 Найти цитируемый пост)

if (eregi("mail.ru", $_POST['mail'])) {
    echo "Sorry...";
} else {
    header("Location: reg.php");
}


Я тоже в таком стиле люблю писать. Занимает мало места и для меня - очень наглядно smile

Автор: Ciber SLasH 1.3.2006, 23:55
Цитата(Wowa @ 1.3.2006, 23:48 Найти цитируемый пост)
Я тоже в таком стиле люблю писать. Занимает мало места и для меня - очень наглядно smile

Аналогично smile

Автор: Alone 2.3.2006, 10:35
Цитата(wsr @ 14.1.2006, 00:17)

По моему это лучший вариант для более удобного парсинга своего же кода в будущем!
А то будет в коде куча {{{{{{{ и }}}}}}}} и попробуй разберись что к чему относится, а так все четко и понятно!


Если встерчается конструкция из более чем 2х циклических вложений - это уже повод задуматься о декомпозиции...

Автор: -=Ustas=- 2.3.2006, 10:40
Цитата(Ciber SLasH @ 1.3.2006, 23:23 Найти цитируемый пост)
Не совсем согласен. У каждого прогера свой стиль программирования.

Стандарты в любом случае должны быть! Т.к. вольное программирование - как кому нравится, становится трудным в сопровождении кода другими программистами! Личный пример: полгода назад принял некоторый проект на поддержку, так я того прогораммиста готов завалить при первой же встрече!!!!!!!!

Автор: CyClon 3.3.2006, 14:26
Меня просто в дрошь кидает, когда вижу такое:

Код
}
else
{


Не красиво до ужаса, вот } else { совсем другое дело ;)

Автор: -=Ustas=- 3.3.2006, 14:58
Стандарты пиар у руля!!! По-любому!

Автор: S.A.P. 3.3.2006, 15:31
Код

if (eregi("mail.ru", $_POST['mail'])) {
    echo "Sorry...";
} else {
    header("Location: reg.php");
}


для такого случая я использую
Код

if (eregi("mail.ru", $_POST['mail'])) 
    echo "Sorry...";
else
    header("Location: reg.php");


а вобще
Код

if (eregi("mail.ru", $_POST['mail'])) 
{
    echo "Sorry...";
    // blablabla

else 
{
    header("Location: reg.php");
    // blablabla
}


И что тут такого ужастного?? Все наглядно и понятно.

Автор: Ciber SLasH 3.3.2006, 17:23
Цитата(CyClon @ 3.3.2006, 14:26 Найти цитируемый пост)
Меня просто в дрошь кидает, когда вижу такое:

Я помню когда сам писал так давно на С. У нас в универе сначала преподавали Pascal и он мне понравился до безумия. Ну и там как раз блоки операторов отделяются так:
Код

if ()
begin
  {действия}
end;

и когда после Pascal-я начали учить C, то я старался придерживаться той структуры кода, как в Pascal-е, т.е. писал так:
Код

if ()
{
  // действия
}

но потом от такой структуры отказался, т.к. код сильно расплывается из-за лишних переводов строк. И в итоге мне приглянулась такая структура:
Код

if () {
  // действия
} else {
  // действия
}

Автор: IZ@TOP 9.3.2006, 13:17
Кому что. Мне больше с отступами нравится

Код

if( condition ) {

    // По сноске до тела конструкции и после
    callfunction();

} else {

    // По аналогии
    $class->callmethod();

}

Автор: RomanK 30.3.2006, 19:01
Мне тоже не нравятся стандарты PEAR.

Сам делаю так:
Имена переменных: все буквы маленькие, слова разделяю "_".
Имя классов: Каждое слово с заглавной буквы. Без "_".
Имя методов, функций - аналогично названию класса. Приватный метод: вначале "_".
Название свойств: первое слово с маленькой буквы, остальные слова с большой. Без "_".
Все отступы делаю табуляцией.

Пример:
Код

<?php
class ClassName
{
    private $firstVar    =null; // Comments.
    private $secondVar   =0;
    
    function TestMethod($var=false)
    {
        if($var) $this->firstVar='string';
        else
        {
            if(is_null($this->secondVar)) $this->secondVar=1;
            else                          $this->secondVar=10;
        }
    }
}
function TestFunction($var=true)
{
    static $a=0;

    if($var) return false;
    else
    {
        if(is_null($a))
        {
            $a=1;
            return false;
        }
        else
        {
            $a=2;
            return true;
        }
    }
}
?>

Автор: Serkys 30.3.2006, 23:16
А я так пишу:
Код

if () {    
  // действия    
}
else {    
  // действия    
};

По мне, так очень удобно. Особо в стандарты не всматривался, пока пишу как удобно мне. Вроде все, кто смотрел мой код, врубались быстро и не жаловались.

Автор: skalex 6.4.2006, 12:33
Может кто писал уже, не знаю ...

Вот такой код:
Код
if ($foo == 'bar') {
   echo "Yes";
} else {
   echo "No";
}

я всегда стараюсь записывать так:
Код
echo ($foo == 'bar') ? 'Yes' : 'No';


Еще пример:
Код
if ($foo == 'bar') {
   $s1 = "Yes";
} else {
   $s1 = "No";
}
$s2 = 'Response: '.$foo.'!';

заменяю на
Код
$s2 = 'Response: '.(($foo == 'bar') ? 'Yes' : 'No').'!';


Разумеется, речь идет о одностроковых действиях в блоках if-else. smile

Автор: Ignat 6.4.2006, 12:56
А кто сказал, что PEAR - это эталон? Если нашлось достаточно большое количество противников такого подхода, то что-то неладно с этим стандартом. Я сам сторонник стандартов, но стандарты, которые усложняют коммуникативность должны быть изменены, ИМХО.
Когда приходится рефакторить огромное количества кода, то начинаешь плеваться от такой размазанности, т.к. страдает визуальное восприятие. Ведь код должен не только работать, но и читаться.

Я всеми руками за конструкцию:

Код

if ($foo == 'bar') {

   $s1 = "Yes";
   $s2 = "Yes";
   $s3 = "Yes";

}elseif ($foo == 'barbar'){

   $s1 = "No";
   $s2 = "Yes";

}else{

   $s1 = "No";

}


В коде: смысловые блоки компактны, четко выделены узлы ветвления, при этом отражено направление ветвления визуально (что страдает у PEAR-а).

Автор: CyClon 6.4.2006, 13:06
Мне все больше нравятся тсандарты PEAR. Так, пересмотрев справочник я нашел там вот такие вещи:

Код
<?php

function myfunc()
{
    if ($variable == 1) {
        return true;
    } else {
        return false;
    }
}

?>


Чем вам не нравится данный подход?
Добавлено @ 13:13
Основные выдержки из мануала:

Цитата
Используйте для отступа 4 пробела, а не табуляцию.


Оформление оператора if:

Код
if ((condition1) || (condition2)) {
    action1;
} elseif ((condition3) && (condition4)) {
    action2;
} else {
    defaultaction;
}


Оформление оператора switch:

Код
switch (condition) {
case 1:
    action1;
    break;

case 2:
    action2;
    break;

default:
    defaultaction;
    break;

}


Объявления переменных, выхов функции:

Код
$var = foo($bar, $baz, $quux);

Код
$short         = foo($bar);
$long_variable = foo($baz);


Объявление функций:

Код
function connect(&$dsn, $persistent = false)
{
    if (is_array($dsn)) {
        $dsninfo = &$dsn;
    } else {
        $dsninfo = DB::parseDSN($dsn);
    }

    if (!$dsninfo || !$dsninfo['phptype']) {
        return $this->raiseError();
    }

    return true;
}


Цитата
Подходят комментарии в стилях C (/* */) и C++ (//). Использование комментариев в стиле Perl/shell (#) не рекомендуется.

Автор: Ignat 6.4.2006, 14:33
Цитата(CyClon @ 6.4.2006, 14:06 Найти цитируемый пост)
Используйте для отступа 4 пробела, а не табуляцию.

Протестую. Из чисто практических соображений - задолбаешься.

Приведу в пример опять рефакторинг - когда приходится лечить прбитый к левому краю код, то количество выставленных табов исчисляется тысячами. Соответственно в пробелах в 4 раза больше. Тем более парсить такой код впоследствии проще.

Код

$short              = foo($bar);
$long_variable = foo($baz);


А это красиво, но малочитабельно. Объявление из 7-8 переменных с именем разной длины приводит к неприятному эффекту, когда видишь, что присваивается, но не видишь чему. Приходится либо ставить курсор, чтобы посмотреть номер строки, либо приложить к монитору линейку =)



Цитата(CyClon @ 6.4.2006, 14:06 Найти цитируемый пост)
Оформление оператора if:

Вот это излюбленный мной стиль. Но предпочитаю в больших блоках ставить разрыв (пустая строка) после открытия блока и перед закрытием.



Цитата(CyClon @ 6.4.2006, 14:06 Найти цитируемый пост)
Оформление оператора switch:

ИМХО, break вертикально должен совпадать с соответствующим case, т.к. по сути является его закрытием, следовательно визуально не должен "вылетать" из логики. A case и default в свою очередь должны иметь отступ от switch, чтобы не "смазывать" закрывающую скобку.
Пример (живой):
Код

    function action($act){
    
        switch ($act){
        
            case 'edit':
                $this->edit();
            break;

            case 'delete':
                $this->delete();
            break;

            case 'save':
                $this->save();
            break;

            default:
                $this->default_action();
        
        }
    }



Всё вышеизложенное - моё ИМХО.

Автор: skalex 6.4.2006, 14:37
Цитата
Приведу в пример опять рефакторинг - когда приходится лечить прбитый к левому краю код, то количество выставленных табов исчисляется тысячами. Соответственно в пробелах в 4 раза больше. Тем более парсить такой код впоследствии проще.


Вообще в некоторых редакторах есть функции вылечивания такого кода (анализ и автоматическая расстановка отступов).

Автор: Ignat 6.4.2006, 14:42
Ну рефакторинг обычно включает в себя не только расстановку отступов.... Так что это просто горькая необходимость. Иногда даже приходится убивать уже выставленные грамотно отступы, при переносе блока.

Цитата(skalex @ 6.4.2006, 15:37 Найти цитируемый пост)
Вообще в некоторых редакторах есть функции вылечивания такого кода

Ну... мы такой роскошью не пользуемся smile EditPlus forever.

ЗЫ А может в нём тоже это есть?


Автор: skalex 6.4.2006, 15:51
Цитата
ЗЫ А может в нём тоже это есть?


Нет. А жаль ... Редактор то достойный. Плохо также, что он вяло развивается ...

Автор: CyClon 6.4.2006, 18:08
Цитата
Протестую. Из чисто практических соображений - задолбаешься.


Если писать в блокноте - я с тобой согласен. Но если писать в том же Zend Studio или PHP Expert Editor, то там можно задать определенное кол-во пробелов. Нажал TAB - 4 пробела есть.

Цитата
А это красиво, но малочитабельно.


Тут я с тобой согласен. Да и это не правило написания - это совет.

Цитата
Вот это излюбленный мной стиль. Но предпочитаю в больших блоках ставить разрыв (пустая строка) после открытия блока и перед закрытием.


Ну, мне вообще нравится такой стиль:

Код
if ($variable)
{
    echo "123";
} else {
    echo "321";
}


Но я все же буду опираться на стандарты smile))

Цитата
ИМХО, break вертикально должен совпадать с соответствующим case, т.к. по сути является его закрытием, следовательно визуально не должен "вылетать" из логики.


Нет, как раз-таки break не должен совпадать с case, т.к. это конструкция да и если мы напишем continue? В общем протест smile

Мой любимый силь:

Код
switch ($_POST['number'])
{
    case 1:
        echo "1";
        break;
    case 2:
        echo "2";
        break;
    case 3:
        echo "3";
        break;
    default:
        echo "Default";
        break;
}

Автор: Elfet 9.4.2006, 17:32
Люблю нажимать Alt + F8 в Визуале smile И не мучаюсь! smile smile

А что деласть с кодом и с отступами если использую EOF?

Код

function get()
{
return <<<EOF
<a href="#">ToTop</a><br />
EOF;
}


Перед EOF; же нельзя ставить пробелы.

Автор: Alone 4.7.2006, 13:18
Цитата(Ignat @ 6.4.2006,  14:33)
Цитата(CyClon @  6.4.2006,  14:06 Найти цитируемый пост)
Используйте для отступа 4 пробела, а не табуляцию.

Протестую. Из чисто практических соображений - задолбаешься.

Приведу в пример опять рефакторинг - когда приходится лечить прбитый к левому краю код, то количество выставленных табов исчисляется тысячами. Соответственно в пробелах в 4 раза больше. Тем более парсить такой код впоследствии проще.

4 пробела отобразятся ОДИНАКОВО в любом редакторе, в то время как tab отображается ВЕЗДЕ ПО РАЗНОМУ. Отсюда и рекомендация не использовать его в разметке кода. 
Знаю многие конторы, где за каждый найденый таб штрафуют. 0.5$
"Молдняк" излечивается после первой же зарплаты smile

Добавлено @ 13:23 
Цитата(CyClon @  6.4.2006,  18:08 Найти цитируемый пост)
Если писать в блокноте - я с тобой согласен. Но если писать в том же Zend Studio или PHP Expert Editor, то там можно задать определенное кол-во пробелов. Нажал TAB - 4 пробела есть.

Кроме того там есть "Auto indent code" который, при отсутствии таб-ов,  правильно расставит отступы.
Кстати, табы в зенде лечу нажатием ctrl+h (заменить '\t' на '____' 4 пробела smile ) 

Автор: AztEK 4.7.2006, 20:21
Какие жаркие споры smile

Джефф Элджер в своей книге "C++ For Real Programmers" писал
Цитата
Эта книга посвящена языковым идиомам, а не расположению фигурных скобок или регистру символов.


Почему бы эту фразу не применить к этому топику? smile
Каждый пишет как ему удобно. Важны идеи. 

Автор: Ignat 5.7.2006, 09:24
Цитата(AztEK @  4.7.2006,  21:21 Найти цитируемый пост)
Каждый пишет как ему удобно. Важны идеи.  

У нас в конторе такой подход называют "креатиффом". Есть товарищи, пишут очень идейно, но в коде хрен разберешься... По три-четыре оператора в строчку и все логи HEX-дампом. 

Автор: awers 25.9.2007, 15:24
Очень жаль что обсуждение остановилось на КАЖДОМУ СВОЕ.
Хотелось бы прийти к более конкретному "доку по стилю написания".
Даже если простым большинством голосов  smile 

Автор: dsCode 25.9.2007, 16:32
Дочитал до середины, дальше, к сожалению, не осилил =)

Кто бы что не говорил (про "каждому свое") - по-любому должны быть style guid'ы. Конечно, они могут быть локальными в какой-то компании, но есть и общепринятые. Код Zend'a и Pear'a - еще не эталон. Поищите нормальную достоверную, стандартизированную документацию по кодингу на PHP. Потому что существует такое понятие как "профессиональный почерк" и все ИМХИ в нем не прокатят ("я привык так-то и так-то", "так лучше" и т.д.). Локальные привычки еще ничего не значат. Вот http://forum.vingrad.ru/forum/topic-173400/anchor-entry1262981/0.html обсуждались некоторые основные принципы. Они верны, и PHP касаются тоже.

P.S.: кстати, насчет сокращений: если условие одиночно, то можно (и даже более профессионально) писать так:

Код

$a === 3 && ($obj->doSomething());

// если с if-ом писать - то скобки - обязательны!

if ($a === 3) {
  $obj->doSomething();
}

// но первый вариант предпочтительней, хотя второй - наглядней

// так же можно писать 

$a = $b || 3; // $a будет $b, иначе 3

// вместо

if ($b) {
  $a = $b;
} else {
  $a = 3;
}

// или 

$a = $b ? $b : 3;

// опять же - первый вариант предпочтительней

Автор: theworldcreator 25.9.2007, 17:44
Цитата(wsr @ 14.1.2006,  00:17)
Я лично при кодинге больших "приложений", предпочитаю пользоваться следующим:
Код

while ( ) :
         # вместо стандартной конструкции while () {} 
endwhile;

if ( ) :
         # вместо стандартной конструкции if () {} 
endif;

for ( ) :
         # вместо стандартной конструкции for () {} 
endfor;

switch ( ) :
         # вместо стандартной конструкции switch () {} 
endswitch;
         # вместо стандартной конструкции foreach () {} 
foreach ( ) :

endforeach;

По моему это лучший вариант для более удобного парсинга своего же кода в будущем!
А то будет в коде куча {{{{{{{ и }}}}}}}} и попробуй разберись что к чему относится, а так все четко и понятно!

Интересно. Никогда не задумывался над таким применением. Надо будет попробовать. Я последнее время, при большом объеме кода, пишу так:
Код

if(a){

//код

}//if(a)

А если условие слишком большое, писал его не целиком, и так понятно:
Код

if(!empty($_POST['search_string']) and ((!empty($_POST['table']) and !empty($_POST['types'])) or !empty($_SESSION['search_values']))){

//код

}//if(!empty($_POST['search_string']) and ((!empty($_PO

P.S.
Здесь так активно рекламировали zend, что я даже скачал. Могу скинуть найденный только что keygen. Либо в личку, либо пусть модератор разрешит его здесь выложить(или хотя бы ссылку показать)

Автор: Vaulter 25.9.2007, 18:08
Цитата(dsCode @ 25.9.2007,  17:32)
Код

// так же можно писать 

$a = $b || 3; // $a будет $b, иначе 3

// вместо

if ($b) {
  $a = $b;
} else {
  $a = 3;
}

// или 

$a = $b ? $b : 3;

// опять же - первый вариант предпочтительней

если $b не существует будет WARNING
поэтому 
Код

$a = ( !empty($b) )? $b : 3;
//ИЛИ
$a = ( isset($b) )? $b: 3;

смотря по контексту

Автор: theworldcreator 25.9.2007, 18:15
Цитата(Vaulter @ 25.9.2007,  18:08)
если $b не существует будет WARNING
поэтому 
Код

$a = ( !empty($b) )? $b : 3;
//ИЛИ
$a = ( isset($b) )? $b: 3;

смотря по контексту

А разве он так не будет проверять переменную только на существование?

Добавлено @ 18:21
незнаю можно ли так(скоро проверю), но должно работать:
Код

$a =  isset($b) ? ($b ? $b : 3):false;

Автор: theworldcreator 25.9.2007, 18:32
Мой способ работает. Ваш
Код

$b=false;
$a = ( isset($b) )? $b: 3;

В результате $a==false, а не 3, как задумывалось. empty() работает нормально. Он просто проверяет на наличие переменной И на ее НЕ равность false, что делает функцию очень удачной для данного случая.

Автор: dsCode 25.9.2007, 19:33
Vaulter, да речь не "о существовании" / "не существовании" переменных там каких-то (этот пример - так - до кучи написал, он тут не при чем вообще). Основная речь, я еще раз повторю - стандартизованные правила оформления кода. Мой вам совет, други, - сразу себя лучше приучать к правильному коду и избавляться от неправильных привычек (удобным вам кажется или нет, но если это не правильно - всегда будет выдавать непрофессионала).

Автор: awers 26.9.2007, 12:49
во всяком случае, я всегда стараюсь придерживаться Zend овского стиля написания кода, искать изящные решения ...
к примеру: когда я работал в одной московской конторе (поддерживал ранее созданные сурсы и создавал новые), попадались такие сайты, где .htaccess весил ~1мб, причем совершенно необоснованно, без комментов. соответственно заглядывая в php можно было потерять сознание. теперь стараюсь в любом случае, на сколько бы "наколенной" разработка не была придерживаться стандартов. этоисты в программировании - муветон!

Автор: SelenIT 27.9.2007, 02:55
Цитата(dsCode @  25.9.2007,  16:32 Найти цитируемый пост)
$a = $b || 3; // $a будет $b, иначе 3

Имхо, в таких выражениях для наглядности обязательно ставить скобки, чтоб не вспоминать на ходу приоритет операторов и не спотыкаться на различиях ||-or и &&-and...

Автор: FCCStepan 12.12.2007, 07:47
Прочитал две страницы, и решил посеять зерно сомнения в ваших, без сомнения, светлых головахsmile  Для пишется понятный красивый и правильный код ? - вернее сказать для кого ? Если вы пишите код для преподавателя по программированию, то, конечно мы все ставим отступы, разделяем и все остальное. А кто ни будь задавался написать правильно работающий, оптимально  работающий но ужасно не читаемый код ?  Для чего ? для того чтобы ваши последователи потратили на то чтобы в нем разобраться столько же времени, сколько потратили бы на написание своего с нуля. 
Сколько пишу на пхп, постоянно ловлю себя на мысли, что мозг не работает, тут нет ничего сложного, после 2го сайта все пишется уже подсознательно, вместе с чатами, фильмами и смс. А когда пишешь <вырезано> код, без структуры, с определением функций в функциях, с переопределением глобальных переменных, с кривыми комментариями, которые понятны только мне  (на примерах и метафорах из жизни) и все еще это пополняешь названиями функций типа Audi_R8 или zzt213 (кузов новой тойота селика),  то в голове приходиться держать массу всяких ассоциаций и сравнений, что делает процесс хотябы более интересным и требовательным к себе, нежели просто , простите, тупо 
$OB1.="bye;" echo $OB1; unset ($OB1).

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

M
skyboy
мата не надо. даже с одной замаскированной буквой

Автор: skyboy 12.12.2007, 09:33
ну, да. конечно. машина, для управления которой надо будет полгода учиться в ВУЗе - это самая что ни на есть хорошая машина, потому что заставляет думать и вспоминать, каким образом можно переключиться с первой передачи на вторую. как же.
а как же ошибки? легко их отлавливать, если постоянные eval? а если функции в функциях?
как быть при добавлении нового функционала через полгода? удобно? просто? без ошибок?
нет, товарищ, с такими взглядами жить будет трудно...

Автор: bars80080 12.12.2007, 10:14
значит товарищ мало кода пишет, у меня уже через месяц вылетят все ассоциации, так как и мировозрение тоже меняется, а разбираться в километрах уже малознакомого кода - проделывать работу второй раз

Автор: N0dwis 12.12.2007, 10:29
Цитата(FCCStepan @  12.12.2007,  07:47 Найти цитируемый пост)
о в голове приходиться держать массу всяких ассоциаций и сравнений

Не знаю, насколько сложные проекты Вы писали, но мое мнение - не очень сложные и не профессиональные.
Да, если пишешь скрипт на 20 строк, то можно обзывать переменные a, b, c и т.п. но если объем кода переваливает даже за 10-20 кб, то (во всяком случае у меня), начинаются проблемы с запоминанием всех имен переменных, функций, классов и т.п. А если они еще и будут названы, как Вы предложили, то проект не будет закончен никогда! Все время уйдет на поиск и попытки написания таких имен. А если еще и пишешь не сам, а в команде - то еще дольше!  smile
Плюс дальше будут БОЛЬШИЕ проблемы с редактированием кода. Вспомнить даже через 2 - 3 дня после написания что именно делает функция с именем zzt213 (особенно если она не очень большая и используется не часто) будет проблематично.
Основные усилия при написании программы должны быть направлены не на разгадывание ребусов с именами переменных, а на построение, написание и отладку логики программы. Если название переменной или функции выбрано правильно - редактировать код можно даже не зная абсолютно точно где и как переменная используется, а просто видя перед собой локальный кусок кода (серьезные изменения так лучше все-таки не делать, но для мелких - самое то).
А  вот как выбирать имена - это уже искусство.

Автор: Feldmarschall 12.12.2007, 10:47
мне кажется, что FCCStepan - это то, что называеют "сетевым троллем". Человек пишет не для того, чтобы разобраться самому или посоветовать другим, а чтобы вызвать флейм.
Я не думаю, что он нуждается во всех тех многочисленных советах, которые на него посыпались. 

Если же подходить к его заявлениям серьёзно, то есть вещи, которые невозможно объяснить - их можно понять только на собственном опыте. К примеру, все эти многочисленные заверения о том, что он сам через два дня забудет. 
Тем более, что он сам говорит, что "усложняет" код для развлечения. Ну развлекается человек и развлекается. Мало ли какие у кого странности. Смысл чьи-то личные тараканы в теме, посвященной технологии в целом?

Впрочем, повторюсь, я всё равно не верю, что все это написано всерьёз, а не с целью развлечься.

Автор: N0dwis 12.12.2007, 12:14
Понял!
FCCStepan пишет просто crackme на php!
 smile

Автор: FCCStepan 12.12.2007, 12:54
В каждой шутке есть доля шутки smile Я не веду пропоганду деградации стиля программирования smile Просто есть вот такой взгляд.  Забывание всего и вся лечиться написанием мануалов, это в том случае, если к проекту планируешь возвращаться. Если это одна стрела, то почему бы ей и не быть со своими закорючками, ведь летает то она так как нужно smile


Feldmarschall, Про сетевого троля не очень понял сравнение .

N0dwis,  если совсем асбтрагриоваться, то можно и так сказать. 


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

Ладно smile продолжайте сабж )

Автор: sTa1kEr 11.1.2008, 13:52
FCCStepan, это называется обфускация и ею совершенно не нужно заниматься программисту самому.

По теме же, можно спорить бесконечно. Однако важно одно, что бы вы всегда придерживались *одного* стиля.

Автор: FractalizeR 11.1.2008, 21:31
Цитата(Feldmarschall @ 12.12.2007,  10:47)
мне кажется, что FCCStepan - это то, что называеют "сетевым троллем". Человек пишет не для того, чтобы разобраться самому или посоветовать другим, а чтобы вызвать флейм.
Я не думаю, что он нуждается во всех тех многочисленных советах, которые на него посыпались. 

Если же подходить к его заявлениям серьёзно, то есть вещи, которые невозможно объяснить - их можно понять только на собственном опыте. К примеру, все эти многочисленные заверения о том, что он сам через два дня забудет. 
Тем более, что он сам говорит, что "усложняет" код для развлечения. Ну развлекается человек и развлекается. Мало ли какие у кого странности. Смысл чьи-то личные тараканы в теме, посвященной технологии в целом?

Впрочем, повторюсь, я всё равно не верю, что все это написано всерьёз, а не с целью развлечься.

Полностью согласен.

Автор: source777 29.1.2008, 00:19
Код должен иметь возможность к расширению и быть достаточно гибким + http://agilemanifesto.org/

Цитата(IZ@TOP @  3.4.2005,  10:58 Найти цитируемый пост)
// Замена переменных в шаблоне
$text = ereg_replace("<!--a-->", $a, $text);
$text = ereg_replace("<!--b-->", $b, $text);
$text = ereg_replace("<!--c-->", $c, $text);
$text = ereg_replace("<!--d-->", $d, $text);// Это по меньшей мере ужасно, но встречается очень часто. // Оптимизируем и получаем одну строку:
$text = str_replace(array('<!--a-->', '<!--b-->', '<!--c-->', '<!--d-->'), array($a, $b, $c, $d), $text);

Для шаблона, имхо, твой вариант не менее ужасен, всего 4 переменных да ещё и с заранее заданными именами, где же гибкость?
Код

 // заменяем все предопределённые переменные их значениями,  а не определённые пустыми значениями
$text = preg_replace("/<!--(\w[\w\d_]*)-->/", "$$1", $text); 
eval('@print "'.$text.'";');                                                        

Автор: CyClon 24.2.2008, 10:50
Плясать нужно начинать от стандартов кодирования Zend.

Если что-то сильно не нравится - используем свое. Чем более распространенный стиль написания кода вы используете, тем легче его будет читать другим кодерам.

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

ИМХО "красиво" написанный код повышает "КПД" smile программиста и уменьшает в будущем время отладки.

ЗЫ: Так же есть стандарты PEAR, но лично мне по душе больше Zend.

Однако, вопреки стандартам Zend:
1. Не использую завершающий тег "?>"
2. Иногда использую другой стиль объявления массивов
3. Вместо "elseif" использую "else if" (C++ Style)
4. Если возникают вопросы, какую функцию использовать (напр. count или sizeof) - опираюсь на стандарты языка С++.

Ссылки по теме (4 разных стандарта кодирования):
http://framework.zend.com/manual/en/coding-standard.coding-style.html
http://pear.php.net/manual/en/standards.php
http://drupal.org/coding-standards
http://tony2001.phpclub.net/doc/standard/

Выбор только за вами.

Автор: dsCode 24.2.2008, 12:19
CyClon
Цитата(CyClon @  24.2.2008,  10:50 Найти цитируемый пост)
Однако, вопреки стандартам Zend:
1. Не использую завершающий тег "?>"

по-моему как раз-таки у Зенда написано НЕ использовать завершающий тег, если нет перемешки php и html (я тоже не использую ;)).

Цитата(CyClon @  24.2.2008,  10:50 Найти цитируемый пост)
Если вы пишите в команде, не важно какие стандарты вы используете, главное чтобы все, кому нужно, без проблем разбирались в вашем коде.

ага, а потом придет человек, который все время писал, придерживаясь Зенда (например) - и будет разбираться в вашей, понятной только вам, иероглифической каше =)

P.S. вот в этом плане Python мне очень нравится - даже отступы "стандартизованы" - если в следующей строке будет не такое количество отступов, как в изначальной - компилятор выдаст ошибку =) Отличное принудительное обучение людей писать правильно =)) На такой код любо посмотреть ) К тому же некоторые (Sun (Java), Python, др.) выкладывают официальные Programming Style Guide'ы, следовать которым - ну я считаю уважением к языку.

Автор: CyClon 24.2.2008, 13:53
Цитата
ага, а потом придет человек, который все время писал, придерживаясь Зенда (например) - и будет разбираться в вашей, понятной только вам, иероглифической каше =)

Ну, я конечно не имел ввиду код без отступов, писанный человеками-обсуксаторами smile Просто в некоторых моментах можно навалять на стандарты и писать как нравится. Например, если не нравится именование функций следуя верблюжей нотации (getFile), можно писать в C-Style а-ля get_file. Все зависит еще от подготовки кодера. Например, многие пишут при сравнении слева констанку, а справа переменную, чтобы "случайно не написать = вместо ==". Лично я таких ошибок на своей памяти за 2 года помню максимум штуки 3 smile А писать константу слева - как-то непривычно и некрасиво. Хотя тут уже нужно определяться, или использовать всевозможные защиты от дурака (отказ от использования завершающего тега, чтобы не допустить случайных пробелов в конце кода; постановка константы в левой части выражения для условных операторов) или же писать так, как приятней smile

ЗЫ: Сейчас перечитывал все 4 стандарта, все разные smile Но PEAR помоему изменился неслоабо (особенно в плане использования фигурных скобок).

Что не понравилось в PEAR сейчас:
1) Использование "elseif" (я использую "else if"
2) Синтаксис оператора switch (здесь я использую Zend-Style)

Плюс ко всему, не могу определиться с именованием. Очень все стандарты разные, причем у каждого именования свои плюсы и минусы.
В классах использовать сокращения типа HTML в верхнем регистре делает названия классов непотяными (Например: HTMLFormBuilder, HTMLToXML). Использование только первый заглавной буквы - некрасивыми (HtmlFormBuilder, HtmlToXml). Однако, скорее придется использовать второй вариант.

Далее с функциями и переменными. В одном из стандартов призывают использовать C-Style имена переменных и функций ($var_name, $life_time, get_file(), set_value()), да бы не путать их с чем-то там smile Однако форма записи мне ужасно ненравиться, намного красивее - $varName, $lifeTime, getFile, setValue). Хотя... Я сейчас все больше стараюсь использовать ООП, работать с классами, поэтому обычных функций приходиться объявлять все меньше и меньше. В классах же использование верблюжей нотации в методах как раз приветствуется.

ЗЫ: Пока писал, даже немного определился со "своими стандартами". Пора бы уже твердо это усвоить и писать годами код в одном стиле.

Ну, и наконец, вспомнил про include. Тут то же, что и с константами слева, и заверщающим тегом. Наверно буду использовать include_once и require_once и работать на "максимальную защиту от дурака а-ля случайных ошибок". Однако, include/require являются такими же конструкциями (а не функциями) языка, как и return. Тут я опять стал на перепутье - использовать скобки или нет?

С-Style:
Код
require_once 'kernel/kernel.php';

Или же:
Код
require_once('kernel/kernel.php);


В общем, больная тема, уже надоела smile Четких стандартов нет, поэтому приходится все-таки использовать свои.

Добавлено @ 13:57
Кстати, иногда встречал такое написание кода:

Код
if ( $var == $value ) {
    echo 'Test';
}


Кто как смотрит на доп. пробелы по бокам внутри скобок? smile Одновременно смотрится понятнее, но и уродливее smile

Автор: bars80080 26.2.2008, 12:32
Цитата

Кто как смотрит на доп. пробелы по бокам внутри скобок


совершенно не согласен, у меня внимание разбегается, а код зрительно распадается
для меня оптимально иметь пробелы вокруг таких элементов как: = == === + - /
но никак не скобок

ещё и фигурные скобки
Код

function select_from_db($q) {
    $r = mysql_query($q);
    $n = 0;
    if(!empty($r)) $n = mysql_num_rows($r);
    for($i = 0; $i < $n; $i++) {
        $s[$i] = mysql_fetch_array($r, MYSQL_ASSOC); }
    if(!empty($s)) return $s;
    else return ''; }

так по-моему оптимально

Автор: Aikus 26.2.2008, 13:56
Уф дочитал. Много интересного узнал. Всё замечательно, т.е. есть замечания:
 вы напрасно развили тему как писать 
Код

//так
if ($a == $b) {
//действия
}
else {
//действия
}

//или так
if ($a == $b) {
//действия
} else {
//действия
}

Это как раз то, что можно оставить на откуп программеру или кодеру (в завивимости от квалификации).
Гораздо важнее чтобы эту конструкцию не сокращали, т.к. тогда теряется прозрачность кода.
Естественно важно как именовать функции, но гораздо важнее создать структуру кода, и не с помощью большого дерева подкрепляемых файлов (include "file.php"),  а с помощью создания модулей (в моём понимании функции, классы). А если писать монолитный код, то хоть как ты именуй функции и пиши if then else, с ростом кода потеряется его смысл. Да и если писать такие вот модули, то инклудить можно будет в одном месте (в начале).
Также, очень важно проектирование, частично затронуто абзацем выше, т.е. формирование заголовков, внутренних ссылок и т.д в проекте.
P.S. со времен java  я делаю мануалы во время написания кода, используя самописную утилиту по образу и подобию javah

Автор: MeIsGremlin 11.6.2008, 17:38
Одинарные кавычки работают быстрее чем двойные так как не включается интерпретатор замены. Поэтому 
Код

echo 'my var '.$var.' another text';

Будет работать быстрее чем тоже самое в двойных кавычках.
Рекомендую в фунциях, условиях и различных операторах использовать использовать именно одинарные кавычки.
например
Код

if ( strcmp($var,'text') == 0 )


Максимально отделить программирование от гипертекста. Чтоб функции расчета, баз данных, создания, обработки возвращали лишь код. А вывод гипертекста или определения переменных шаблона было только в однои месте. Так легче отладку делать, читать код и заменять в случае чего вывод. Не надо лазить по инклюдам и другим файлам. 

Текст ошибок и сообщений, и вообще весь текст более менне статического назначения естественно лучше хранить отдельно в файле. Куда потом может зайти любой человек дорабатывающий проект и изменить "проффессор" на "профессор" без поиска по проекту или лазания по коду.

Лучше разрабатывать код с включенными warnings, notices  и тд. Так видней недоработки. И код будет правильней.

Автор: Feldmarschall 11.6.2008, 20:06
Хехе, одинарные кавычки - это уже мем.
Ну, и диагноз, разумеется =)

В остальном все правильно. Впрочем, если вчитаться - то тоже видно, что понимания нет, а есть зазубренные правила.
Какой такой код функции должны возвращать? Какая разница - по инклюдам "лазить" или по шаблонам?

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

Автор: boogi 12.6.2008, 00:11
И всё-таки отделение кода от гипертекста это "правило" тесно связано с поставленной задачей. 

От себя добавлю (если этого не было) как можно меньше регулярных выражений.
sizeof() быстрее и красивее count()
как можно проще индексы массивов (числовые лучше всего)

Автор: Feldmarschall 12.6.2008, 00:18
хехе, ещё один =)
sizeof(), даже если бы она не была одной и той же функцией, что и  count(), все равно не была бы быстрее или медленнее. 
То же самое и с массивами. да делайте те индексы ,которые удобнее. Если раз в сто лет этот индекс станет узким местом - переделаете. 
когда ж вы поймете, что ахиллес все-таки перегонит черепаху?

Автор: boogi 12.6.2008, 00:24
Цитата(Feldmarschall @ 12.6.2008,  00:18)
хехе, ещё один =)
sizeof(), даже если бы она не была одной и той же функцией, что и  count(), все равно не была бы быстрее или медленнее. 
То же самое и с массивами. да делайте те индексы ,которые удобнее. Если раз в сто лет этот индекс станет узким местом - переделаете. 
когда ж вы поймете, что ахиллес все-таки перегонит черепаху?

хоть какая-то нелогическая отпимизация никогда не мешала.
представь 10к^2 обращение к массиву 

Код

$a['i_love_this_too_long_indexes_cause_i_like_to_type_mua_ha_ha'] = 'lol';
$a['oh_m_g_this_is_another_f_u_c_k_i_n_g_index'] = 'zzz';


тем более что займет это всё ровным счетом минимум времени...( я про оптимизацию xD )

Добавлено через 10 минут и 15 секунд
Если можно отнести к правилу хорошего кода, для серьёзного проекта, то это несомненно:
Кэширование повторно используемых данных внутри классов, запросов

Автор: Feldmarschall 12.6.2008, 00:37
Если эта страна и погибнет, то только из-за таких "мыслителей". 
И ведь на полном серьезе обсуждается, каким концом разбивать яйцо. Со времен Свифта ни-че-го не изменилось. Понять действительно важные вещи в состоянии единицы. А остальные будут заниматься оптимизацией длины имен переменных

Автор: boogi 12.6.2008, 00:40
Цитата(Feldmarschall @ 12.6.2008,  00:37)
Если эта страна и погибнет, то только из-за таких "мыслителей". 
И ведь на полном серьезе обсуждается, каким концом разбивать яйцо. Со времен Свифта ни-че-го не изменилось. Понять действительно важные вещи в состоянии единицы. А остальные будут заниматься оптимизацией длины имен переменных

При чем тут это, философ? Посмотри на название топика. И лучше не пытайся прыгнуть выше головы.

PS: Я буду только рад если та страна про которую ты говоришь погибнет.

Автор: Sannis 12.6.2008, 00:52
Цитата(Feldmarschall @  11.6.2008,  20:06 Найти цитируемый пост)
Какой такой код функции должны возвращать?

Видимо имелось в виду, что функции модели должны возвращать только данные или код результата(не в смысле php код), т.е. не должны возвращать "Выполненно успешно", а лучше "success" или какое-то заранее определённое значение.

Сам же я хотел такой вопрос задать, из области не очень повседневной:
Принято (обычно/часто вижу такое) приватные методы называть с подчёркиванием в начале и маленькими буквами, тогда как публичные - с использованием больших(в верблюжьей или иной нотации - не важно). В часности, в php4 это часто применялось, чтобы можно было сразу видеть, какие методы предназначены для вызова извне, а какие выполняют утилитарные функции и вызываются другими методами класса. Столкнулся с тем, что как бы не хотелось, но в некотором классе набралось довольно болшое количество публичных методов, причём часть из них, тем не менее, также вызывается в других из низ. При этом эти методы я не могу сделать приватными в силу того, что они иногда мной применяются-таки в остальной части скрипта, хотя и довольно редко. Использует ли кто-то специальные способы разделения методов класса "по частоте использования" путем именования специальным образом?

Автор: Fortop 12.6.2008, 02:31
Цитата(boogi @  12.6.2008,  00:24 Найти цитируемый пост)
представь 10к^2 обращение к массиву 

Не могу представить. Зачем нам 100млн обращений к массиву? smile

Цитата(Sannis @  12.6.2008,  00:52 Найти цитируемый пост)
"по частоте использования"

По типу операций и возвращаемым результатам - да. По частоте нет.

например

getSomethingList - возвращает массив
getSomethings - возвращает массив объектов Something
updateSomething - обновляет Something

Добавлено через 4 минуты и 41 секунду
Sannis
Цитата(Sannis @  12.6.2008,  00:52 Найти цитируемый пост)
довольно болшое количество публичных методов

Имеется класс для работы с базой, примерно 250 методов работать во всяких блокнотах - сложновато. В Zend Studio - нормально.

Автор: Sannis 12.6.2008, 12:15
Преимущества IDE я уже оценил) Что-ж, спасибо, пока не буду размышлять, не очень-то они и мешают.

Автор: Цербер 16.6.2008, 10:29
Почитал всю тему, очень интересно читать такие дисскусии и обсуждения, а особенно для новичков.
Сам на php пишу относительно не так давно, но стараюсь читать как можно больше инфы касающейся php.
Когда начинал прочитал одну очень интересную книжку PHP5 на примерах (М.Кузнецов, И.Симдянов,С.Голышев) откуда впринципе и узнал про стили программирования(о чём даже представления не имел, до того момента)
там описано 4 стиля (расставления фигурных скобок)
Код

1.Рациональный стиль -  if($flag){ echo "Hello, World!"; }
2.Стиль Алмена или стиль BSD - 
  if($flag)
  {
    echo "Hello, World!";
  }
3.Стиль Whitesmith

if($flag)
  {
  echo "Hello, World!";
  }
4.Стиль GNU.
$flag = true;
if ($flag)
{
  echo "Переменная равна true";
  exit();
}

И для себя наиболее удобным и читабельным посчитал Стиль GNU.
Это я к тому что стилей много, думаю эти 4 только малая часть всех существующих, хотя могу и ошибаться, стилей много и каждый кодер выбирает тот который удобен ему.
Так же придерживаюсь тона при названии переменных, функций, разделения пробелами +/=/- и т.д., т.к. сам нарывался на скрипты где в названии переменных использовали что то вроде $l_gh а функции назывались $drw_n при этом комментарии в коде отсутствовали вообще.
Так же хотелось бы задать опытным кодерам вопрос, может и покажется он глупым, но всё же, предподчительно в какой кодировке писать скрипты? я юзаю utf-8.
P.S.
ИМХО - Хорошего тона, должны придерживаться все кто кодит, тем самым проявляя уважение к другим кодерам.  

Автор: nerezus 22.6.2008, 10:33
Цитата

Одинарные кавычки работают быстрее чем двойные так как не включается интерпретатор замены.
 Это происходит при лексическом анализе, поэтому не имеет роли. Ведь на серваке по любому будет кеширование байткода.

P.S. Кстати непонятно, нахрена замену делали, неужели было влом лишние 2 условия в StateMachine вписать? Хрен этих разработчиков поймешь )

Цитата

ам описано 4 стиля (расставления фигурных скобок)
 Предпочитаю Java-style.

Код

if (condition) {
    someCode();
}


Цитата

Так же хотелось бы задать опытным кодерам вопрос, может и покажется он глупым, но всё же, предподчительно в какой кодировке писать скрипты? я юзаю utf-8.
 В однобайтовой. i18n не планируется у меня. Для i18n же utf-8 бы юзал.

Автор: MuToGeN 22.6.2008, 14:54
0. Логика визуализации и бизнес-логика - абсолютно разные вещи, это стоит держать отдельно друг от друга.
1. Табы или 4 пробела - это не важно, главное, чтоб другим оно не мешало.
2. По правилам кодинга (не программирования) существуют strict-стандарты для java, я стараюсь держаться именно за них.

Автор: gta4kv 22.6.2008, 19:18
Цитата

2. По правилам кодинга (не программирования) существуют strict-стандарты для java, я стараюсь держаться именно за них. 

пример в студию smile

Мой стиль вот:
Код

<?php
/**
+--------------------------------------------------------------------------
|   TestScript
|   ========================================
|   by gta4kv
|   (c) 2008 BojanScripts
|   ========================================
|   Email: [email protected]
+---------------------------------------------------------------------------
|   TestScript in not free software
+---------------------------------------------------------------------------
|   > $Date: 22-06-2008 20:24 +0400 (22 June 2008) $
|   > $Revision: 1 $
|   > $Author: gta4kv $
+---------------------------------------------------------------------------
|
|   > Date started: 22 June 2008
|   > File: class.test.php
|
+--------------------------------------------------------------------------
*/


/**
*
*  test1 class
*  general system class
*
*/
class test1 
{
        public $test;
        public $soLongTest;
        
        /**
        * doAny ()
        * this function do anything
        * @var string $var1
        * @var string $var2
        */
        public function doAny( $var, $var2 ) 
        {
                $this->test       = $var1;
                $this->soLongTest = $var2;
                return sprintf( "The hell %f added by %f", $this->test
                                                           $this->soLongTest
                                        );
                      
        }
}

$myclass = new test1(  );
print $myclass->doAny( 'post', 'gta4kv' );
?>

Пришел к нему,  как к самому удобному,  достаточно удобно его читать smile

Автор: MuToGeN 23.6.2008, 07:29
Цитата(gta4kv @  22.6.2008,  19:18 Найти цитируемый пост)
пример в студию

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

while (clauses) {
    if (other_clauses) {
        // тут какой-то еще код
    }
}

вместо

while(...) if (...)
        ......

Если функция/метод требует большое кол-во параметров, то не писать все в одну строку, т.е. что-то вроде
Код

some_function(
    $param0,
    $param1,
    ......,
    $paramN
);

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

Автор: MuToGeN 23.6.2008, 07:54
Цитата(MuToGeN @  23.6.2008,  07:29 Найти цитируемый пост)
Подобные вещи как раз делают все более читабельным для других.

Те, кто копался в исходниках e-commerce и помнит строки размером в несколько килобайт с 8ю - 10ю закрывающимися скобками в конце (выглядит как идиотский смайлик, кстати), меня точно поймут.

Автор: MuToGeN 26.6.2008, 09:31
Проглядел по-внимательнее тему...
Цитата(boogi @  12.6.2008,  00:24 Найти цитируемый пост)
$a['i_love_this_too_long_indexes_cause_i_like_to_type_mua_ha_ha'] = 'lol';
$a['oh_m_g_this_is_another_f_u_c_k_i_n_g_index'] = 'zzz';

Тут есть и другая крайность (греха таить не буду, несколько лет назад сам страдал подобным) - к примеру, алиасы для имен стандартных функций, создаваемые ради того, чтоб меньше топтать клаву пальцами. Cause i dont like typing.
Уже давно понял, что по имени функции или переменной должен быть понятен ее логический смысл. Другими словами, о какой оптимизации может идти речь, если к разработке подключится новый человек и будет смотреть на исходники как баран на новые ворота.

Автор: Resha 23.10.2008, 10:46
Правила хорошего кода превратились в попытку навязать свои стандарты окружающим smile
P.S. Использование бикапитализации для классов, кэмел-кейс для методов и андерскора для переменных - это изврат почище вилок для салата, рыбы, мяса и пасты smile

Автор: Resha 23.10.2008, 11:29
Цитата(boogi @ 12.6.2008,  00:11)
От себя добавлю (если этого не было) как можно меньше регулярных выражений.
sizeof() быстрее и красивее count()
как можно проще индексы массивов (числовые лучше всего)

sizeof() не может быть ни быстрее, ни красивее count(). Хотя бы потому, что sizeof - алиас count'а, а не наоборот. Про скорость вообще ничего говорить не буду - это не разные функции, это разные имена одной и той же функции.

Про цифровые индексы тоже очень порадовало. Тогда давайте и в классах свойства называть p1, p2, p3 и т.п. Вообще, ассоциативный массив с цифровыми индексами - это революционное решение smile

Автор: zeusakm 26.10.2008, 00:14
Итак мальчики перестаньте мериться чл***ми продолжим.
Правило №10.
В случаях когда массивы незначительные меняем:
Код

$arr = array("NY" => "New York", "LA" => "Los Angeles");
 
на:
Код

$arr["NY"] = "New York";
$arr["LA"] = "Los Angeles";
 

А да и еще №8 можно сделать Abstract_Connection_DBS - соответственно MySQL, PostgreSQL и если надо Oracle =)

Добавлено через 2 минуты и 4 секунды
Ой блин sorry смотрел первую или смотрите первую =))

Автор: awers 26.10.2008, 02:54
В больших блоках очень удобно использовать не {} а к примеру
Код


switch ():
endswitch;

foreach ()
endforeach;

while ()
endwhile;

if ()
endif;

for ()
endfor;


Добавлено через 2 минуты и 46 секунд
эх. забыл. мы это уже в прошлом году обсуждали

Автор: awers 26.10.2008, 23:32
1) Хотелось бы послушать обоснование минусам
2) А вы разберитесь с кодом где
Код

foreach(..){
if(..){
if(..){
while(..){
{
{
}
}
}
}
}
}

и т.д.

Автор: QryStaL 30.10.2008, 13:34
Код

foreach (...)
{
    if (...)
    {
        if (...)
        {
            while (...)
            {
            }
        }
    }
}


И никаких end... не нужно.
А если не делать отступов на вложенных блоках, то вообще кошмар получится =)

Автор: awers 30.10.2008, 14:08
отступы я просто не стал тут ставить, но сам факт, когда в таких блоках по 150 - 200 строк в которых тоже разное попадается - не очень удобно видеть {}

Автор: QryStaL 30.10.2008, 15:17
Цитата(awers @  30.10.2008,  14:08 Найти цитируемый пост)
в таких блоках по 150 - 200 строк

надо разбивать на мелкие функции / методы

Автор: mxt 16.11.2008, 00:04
Цитата(zeusakm @ 26.10.2008,  00:14)
Правило №10.
В случаях когда массивы незначительные меняем:
Код

$arr = array("NY" => "New York", "LA" => "Los Angeles");
 
на:
Код

$arr["NY"] = "New York";
$arr["LA"] = "Los Angeles";
 

Нет, так не известно точно что происходит:  обьявление нового массива или приваение значение  массиву.
Вот так понятнее
Код

$arr = array("NY" => "New York",
                     "LA" => "Los Angeles");



Автор: youri 1.12.2008, 04:34
Цитата(Mal Hack @  2.4.2005,  15:43 Найти цитируемый пост)
5. Минимум переменных необходимых для решения задачи.

я бы выбрал читабельность

Цитата(Mal Hack @  2.4.2005,  15:43 Найти цитируемый пост)
7. Вывод гипертекста - один раз.

один раз - все подготовить, и за один print вывести? не знаю, не понятно зачем такое правило

Цитата(IZ@TOP @  3.4.2005,  10:58 Найти цитируемый пост)

// Замена переменных в шаблоне
$text = ereg_replace("<!--a-->", $a, $text);
$text = ereg_replace("<!--b-->", $b, $text);
$text = ereg_replace("<!--c-->", $c, $text);
$text = ereg_replace("<!--d-->", $d, $text);
// Это по меньшей мере ужасно, но встречается очень часто.
// Оптимизируем и получаем одну строку:
$text = str_replace(array('<!--a-->', '<!--b-->', '<!--c-->', '<!--d-->'), array($a, $b, $c, $d), $text);

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

Цитата(IZ@TOP @  10.10.2005,  13:49 Найти цитируемый пост)
Мне нравятся упрощенные конструкции условий использовать
Код

$a = (is_numeric($b)) ? $b : 0;


главное не отказаться от ifов ;-)

Цитата(AntonioBanderaz @  13.10.2005,  23:06 Найти цитируемый пост)
+ ко всему... Не знаю относится это к правилам хорошего кода, но что правила - точно.не объединять при выводе длинные строки, время выполнения увеличивается Т.е.
Код

echo $str1.'fghgfh'.$str2;
//аналогично
print("$str1 sdgfsdgdsg $str2");
//заменяем на
echo $str1;
echo 'fghgfh';
echo $str2;
print("$str1 sdgfsdgdsg ");
print($str2);


я бы хотел увидеть пример, когда бы конкатенация стала заметна на общем фоне

Цитата(AntonioBanderaz @  13.10.2005,  23:06 Найти цитируемый пост)
забыть про exec и system!

я думаю им можно найти применение, но если то же можно выполнить средствами пхп, то ими и стоит воспользоваться

Цитата(wsr @  19.1.2006,  22:19 Найти цитируемый пост)

Цитата(CyClon @  19.1.2006,  21:33 Найти цитируемый пост)

Где-то читал, что
Код
echo "My name is $name!";

Намного быстрее чем
Код
echo "My name is".$name."!";

И быстрее чем
Код
echo "My name is {$name}!";


Быстрее но не значит лучше!В дальнейшем, при парсинге кода гораздо легче в большом блоке данных найти echo "My name is".$name."!"; чем echo "My name is $name!";

smile 

Цитата(-=Ustas=- @  2.3.2006,  10:40 Найти цитируемый пост)
Цитата(Ciber SLasH @  1.3.2006,  23:23 )Не совсем согласен. У каждого прогера свой стиль программирования. Стандарты в любом случае должны быть! Т.к. вольное программирование - как кому нравится, становится трудным в сопровождении кода другими программистами! Личный пример: полгода назад принял некоторый проект на поддержку, так я того прогораммиста готов завалить при первой же встрече!!!!!!!!

ну я думаю, дело было не в стиле, а как минимум в его отсутствии

Цитата(dsCode @  25.9.2007,  16:32 Найти цитируемый пост)

P.S.: кстати, насчет сокращений: если условие одиночно, то можно (и даже более профессионально) писать так:
Код

$a === 3 && ($obj->doSomething());
// если с if-ом писать - то скобки - обязательны!
if ($a === 3) {
$obj->doSomething();
}
// но первый вариант предпочтительней, хотя второй - наглядней


здесь профеcсионализм, похоже, заключается в краткости в ущерб читабельности, я за читабельность)

Цитата(boogi @  12.6.2008,  00:24 Найти цитируемый пост)

Если можно отнести к правилу хорошего кода, для серьёзного проекта, то это несомненно:
Кэширование повторно используемых данных внутри классов, запросов

Цитата

Rob Pike offers the following "rules" in Notes on Programming in C as programming maxims,[1] though they can be easily viewed as points of a Unix philosophy:[citation needed]
Rule 1: You cannot tell where a program is going to spend its time. Bottlenecks occur in surprising places, so do not try to second guess and put in a speed hack until you've proven that's where the bottleneck is.
Rule 2: Measure. Do not tune for speed until you have measured, and even then don't unless one part of the code overwhelms the rest.
Rule 3: Fancy algorithms are slow when n is small, and n is usually small. Fancy algorithms have big constants. Until you know that n is frequently going to be big, don't get fancy. (Even if n does get big, use Rule 2 first.)
Rule 4: Fancy algorithms are buggier than simple ones, and they are much harder to implement. Use simple algorithms as well as simple data structures.
Rule 5: Data dominates. If you have chosen the right data structures and organized things well, the algorithms will almost always be self-evident. Data structures, not algorithms, are central to programming.
Rule 6: There is no Rule 6.


ну от себя добавлю, что не ставлю { в отдельной строке, потому что это почти пустая строка, а пустыми строками я разделяю код на блоки, двумя пустыми строками - методы
а вообще, так как человек может запомнить 7+/-2 элемента, я пришел к выводу, что оптимальное количество элементов в строке - 7, строк в блоке - 7, блоков в методе - 7, функций в классе - 7, строк в файле - 200, оптимальный размер файла - 3 КБ  smile шучу, конечно, но в каждой шутке - http://bsolano.com/ecci/ci-2200/artu/ch04s01.html (график)

ну и не могу не согласится
Цитата(sTa1kEr @  11.1.2008,  13:52 Найти цитируемый пост)
По теме же, можно спорить бесконечно. Однако важно одно, что бы вы всегда придерживались *одного* стиля.

Автор: MoLeX 6.5.2009, 06:10

 ! 
MoLeX
Модератор: тему подчистил

Автор: nichnikov 14.5.2009, 10:19
Не писать двойные кавычки где можно обойтись одними  

Автор: IZ@TOP 28.5.2009, 12:53
Цитата(nichnikov @  14.5.2009,  11:19 Найти цитируемый пост)
Не писать двойные кавычки где можно обойтись одними   

Экономия воздуха?

Автор: bars80080 28.5.2009, 13:52
Цитата(IZ@TOP @  28.5.2009,  12:53 Найти цитируемый пост)
Экономия воздуха? 

правила хорошего кода

Автор: MoLeX 28.5.2009, 14:02
Цитата(bars80080 @  28.5.2009,  13:52 Найти цитируемый пост)
правила хорошего кода 

 smile 

сам начинаю так себя приучать)

Автор: Elfet 28.5.2009, 15:18
объясните про кавычки? какая разница? где и как использовать? 

Автор: Kirsan 28.5.2009, 16:08
Цитата(Elfet @ 28.5.2009,  16:18)
объясните про кавычки? какая разница? где и как использовать?

Если строка в себе не содержит переменных, то предпочтительнее использовать одинарные кавычки.
Если содержит, то кому как удобнее - конкатенация или же строка в двойных кавычках с переменными внутри.

Автор: bars80080 28.5.2009, 17:49
Цитата(Kirsan @  28.5.2009,  16:08 Найти цитируемый пост)
Если содержит, то кому как удобнее - конкатенация или же строка в двойных кавычках с переменными внутри. 

правила хорошего кода - как раз одинарных
в двойных переменные видны гораздо хуже (не всякий редактор берёт), а главное это порождает дополнительный пас для ошибок

Автор: Kirsan 28.5.2009, 18:18
Цитата(bars80080 @ 28.5.2009,  18:49)

правила хорошего кода - как раз одинарных
в двойных переменные видны гораздо хуже (не всякий редактор берёт), а главное это порождает дополнительный пас для ошибок

Да, я сам предпочитаю склеивать строки. Ещё видел вариант в задании оператору echo нескольких параметров. Такой изврат, ИМХО smile
Код

echo 'value = ', $var;

Автор: Elfet 28.5.2009, 19:18
Kirsan, почемУ? Потому что-то кто то так уже привык писать? 

Автор: bars80080 28.5.2009, 19:20
Цитата(Elfet @  28.5.2009,  19:18 Найти цитируемый пост)
Kirsan, почемУ? Потому что-то кто то так уже привык писать?  

"правила хорошего кода" - это не документированный свод инструкций, а просто элементарное уважение к остальным программистам, которое выражается в написание понятного и легко усваиваемого кода

Автор: Elfet 28.5.2009, 19:32
Я просто думал что есть какая-то техническая обоснованность такого правила. Выходит что это просто нотация? 

Автор: bars80080 28.5.2009, 20:16
Цитата(Elfet @  28.5.2009,  19:32 Найти цитируемый пост)
есть какая-то техническая обоснованность такого правила

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

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

Автор: MoLeX 29.5.2009, 05:56
Цитата(Kirsan @  28.5.2009,  18:18 Найти цитируемый пост)
echo 'value = ', $var;

предпочитаю тчк 
Код

echo 'value = ' . $var;

Автор: youri 30.5.2009, 03:03
по сути, согласен с Feldmarschall - http://forum.vingrad.ru/forum/topic-47445/anchor-entry1546336/105.html
(только не про страну и не про единицы)

Автор: bars80080 30.5.2009, 11:38
youri, имхо, взгляд на эту проблему очень сильно зависит от того сколько вам приходится ворочать тонн чужого кода.

когда сталкиваешься с таким:

Код

<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<script language="javascript">
function ChangeMenu(){
var select_name = document.pages.id_subsecF.value;
<?php
$sql = "select subsection.id from subsection left join types on types.id = subsection.id_type order by subsection.oder";
$db->query($sql);
$i = 0;
while($db->next_record()){
    $id_sub_ = $db->r('id');
    $sql = "select oder from pages where id_subsec='" . $id_sub_ . "' order by oder desc";
    $db1->query($sql);
    if($db1->next_record()){
        $order_page = $db1->r('oder') + 1;
        if($i == 0){
            $order_sub0 = $db1->r('oder') + 1;
            $i = 1;
        }
    }
    else{
        $order_page = 0;
        if($i == 0){
            $order_sub0 = 0;
            $i = 1;
        }
    }
    echo 'if(select_name == ' . $id_sub_ . '){' . "\n";
    echo 'var order=' . $order_page . ';' . "\n";
    echo 'document.pages.oderF.value = order;' . "\n";
    echo '}' . "\n";
}
            
?>
}
</script>
<?php
$url="main.php?type=$type";
if(isset($next)) $url.="&next=$next";
//-----------------------------------
//---------- Добавление разделов---------
$t_act="ins";
if(isset($act)&&$act=="edit"){
    $t_act="upd";
}
echo "<table border=0 cellpadding=3 cellspacing=0>".
"<form method=post name=pages action=$url&act=$t_act>\n";
//echo formDropDown("Подраздел","id_subsecF","0","select subsection.id, types.name as name from subsection left join types on types.id = subsection.id_type",0,"","","","id","name");
echo "<tr><td>Подраздел:</td><td><SELECT NAME=\"id_subsecF\" onChange=\"ChangeMenu()\">\n";
$sql = 'select section.id, types.name as name from section left join types on types.id = section.id_type order by section.oder';
$db->query($sql);
while($db->next_record()) {
    $sql = 'select subsection.id, types.name as name from subsection left join types on types.id = subsection.id_type where subsection.id_section='.$db->r('id').'';
    $db1->query($sql);
    while($db1->next_record()) {
        echo "<option value=\"".$db1->r('id')."\"";
        if (isset($id_subsecF) && $id_subsecF == $db1->r('id')) echo " selected";
        echo ">".$db->re("name") . "->" . $db1->re("name")."</option>\n";
    }
}
echo "</SELECT></td></tr>\n";
    
echo formText("text", "Название", "nameF", "", "size=40");
echo formText("text", "Файл", "file_nameF", "untitled.php", "size=40");
echo formText("text", "Порядок", "oderF", isset($order_sub0)?$order_sub0:'', "size=10");
if(isset($act) && $act == "edit")
    echo formText("hidden", "", "idF", isset($idF)?$idF:"", "");
echo formText("send", "", "", "", "");
echo "</form></table><br>\n";
//---------- Конец Добавления разделов ---

//---------- Просмотр разделов на сайте ----------
if(isset($message))
    echo "<font color=red>$message</font><br><br>";
$sql = "select pages.*, types.name as name, types.file_name as file_name from pages left join types on types.id = pages.id_type order by pages.id_subsec, pages.oder";
$sql_ = Navigate(50,isset($next)?$next:0,$url,$sql);
if(strlen($nav)>0) echo "$nav<br><br>\n";
$db->query($sql_);
echo "<table border=0 cellpadding=3 cellspacing=1 width=100% >\n";
echo "<tr><td class=\"zag\">Действие</td><td class=\"zag\">Раздел->Подраздел</td><td class=\"zag\">Название</td><td class=\"zag\">Имя файла</td></tr>";
$i = 2;
while($db->next_record()){
    if($i == 1){
        $i = 2;
    }
    else{
        $i = 1;
    }

    echo "<tr><td class=\"body".$i."\">";
    $idF = $db->r("id");
    echo $db->r("oder");
    if($Site_user_rights>2)
        echo " - <a href=\"$url&act=edit&idF=$idF\">Изменить</a>\n";
    if($Site_user_rights>3)
        echo " - <a href=\"$url&act=del&idF=$idF\">Удалить</a>\n";
    echo "</td><td class=\"body".$i."\">";
    $id_section = $db1->getfield("select id_section from subsection where id=".$db->r("id_subsec")."","id_section");
    echo $db1->getfield("select types.name as name from section left join types on types.id = section.id_type where section.id=".$id_section."","name") . "->";
    echo $db1->getfield("select types.name as name from subsection left join types on types.id = subsection.id_type where subsection.id=".$db->r("id_subsec")."","name");
    echo "</td><td class=\"body".$i."\">";
    echo $db->re("name");
    echo "</td><td class=\"body".$i."\">";
    echo $db->re("file_name");
    echo "</td></tr>\n";
}
echo "</table>\n";
if(strlen($nav)>0) echo "<br>$nav\n";
?>
<br>
(а это всего лишь одна из десяти подключаемых частей при строительстве страницы), волей-неволей станешь поборником чистого и аккуратного кода

Автор: Elfet 30.5.2009, 12:19
bars80080, такой бы обфуксатор иметь smile))

Автор: nerezus 30.5.2009, 14:05
Цитата

Не писать двойные кавычки где можно обойтись одними  
 Ты ошибся темой, это правила хорошего кода, а не примеры плохого.

На спичка не сэкономишь, а конкатенация длинной строки твоим способом будет нечитаема.

Цитата

правила хорошего кода - как раз одинарных
 Да ну?
Zend Framework Documentation, пункт B.4.2.3.
Для подстановки переменных используются двойные.

Цитата

в двойных переменные видны гораздо хуже (не всякий редактор берёт)
 Пользуйся "невсяким". Или вообще IDE.
А так конечно можно сказать, что PHP какашка, так как его блокнот не подсвечивает.

Автор: youri 31.5.2009, 04:06
Цитата(bars80080 @  30.5.2009,  11:38 Найти цитируемый пост)
взгляд на эту проблему очень сильно зависит от того сколько вам приходится ворочать тонн чужого кода

я не имел в виду, что нужно писать как прийдется: стиль кодирования - это положительно, только лучшего нету

а в этой теме много субъективных моментов и ненужных оптимизаций, имхо

p.s. кроме того, тема то ли нечетко задана, то ли очень обширная. Правила хорошего кода касаются только оформления?

Автор: bars80080 31.5.2009, 09:21
Цитата(nerezus @  30.5.2009,  14:05 Найти цитируемый пост)
На спичка не сэкономишь, а конкатенация длинной строки твоим способом будет нечитаема.

а я говорю наоборот

Цитата(nerezus @  30.5.2009,  14:05 Найти цитируемый пост)
Да ну?
Zend Framework Documentation, пункт B.4.2.3.
Для подстановки переменных используются двойные.

ну и кто они после этого?


Цитата(youri @  31.5.2009,  04:06 Найти цитируемый пост)
Правила хорошего кода касаются только оформления? 

главный критерий, то что твой код будет быстро и эффективно воспринят другим человеком

Автор: youri 31.5.2009, 10:05
Цитата(bars80080 @  31.5.2009,  09:21 Найти цитируемый пост)
а я говорю наоборот

и кто прав? (а спорим не подеретесь  smile )

Автор: nerezus 31.5.2009, 11:42
Цитата

ну и кто они после этого?
 Здравомыслящие люди, а что?

Я как-то больше доверяю себе и создателям PHP, чем Васе Пупкину в твоем лице. Ничего личного, только профессиональное.

Понимаешь, ускорение кода на 0%(не забываем про кэширование байткода) с проигрышем читаемости - это плохо.
А если твоя IDE - блокнот, а не IDE - то это ТВОИ проблемы.

Автор: youri 31.5.2009, 11:46
Цитата(nerezus @  31.5.2009,  11:42 Найти цитируемый пост)
Понимаешь, ускорение кода на 0%(не забываем про кэширование байткода) с проигрышем читаемости - это плохо.

а откуда информация про читаемость (что читабельнее)?

Автор: bars80080 31.5.2009, 13:34
Цитата(nerezus @  31.5.2009,  11:42 Найти цитируемый пост)
Я как-то больше доверяю себе и создателям PHP, чем Васе Пупкину в твоем лице.

а я как-то больше доверяю личным наблюдениям, а не чужому мнению.
когда очередной раз здесь скидывают класс по БД с малопонятными конструкциями типа $db->fetch_row(), я спрашиваю себя, нафига вообще было писать такой код, который ни капельки не облегчает процесс написания? но все пользуются, я им не возражаю. но это не значит, что я должен брать тот же класс и юзать его
когда начинал, то у меня все скрипты писались на базе Котерова (его подключатель библиотек, его мейловый класс, класс работы с БД и прочее). постепенно я отказался от всего, даже от его dump, потому что находил (либо писал) более удачные, компактные и эффективные вещи.
может где-то проигрывали в универсальности, но зато без того абсурда, чем они изобиловали, увеличивая и время работы в разы, и нагружая БД, и не отдавая нужной эффективности

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


Цитата(nerezus @  31.5.2009,  11:42 Найти цитируемый пост)
Понимаешь, ускорение кода на 0%(не забываем про кэширование байткода) с проигрышем читаемости - это плохо.

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

Автор: nerezus 31.5.2009, 13:42
Цитата

но все пользуются
 Скажем, только новички. Либо уже давно написано и отлажено, а пользуются по привычке.
Потому что уже есть куча стандартных ОО-вариантов.

Цитата

смысла в них вообще не вижу, если создание сайта у меня занимает всего 5 минут, путём копирования предыдущей версии. а далее дизайн, контент и размещение блоков. т.е. ничего общего с программированием на пхп.
 Никогда не приходилось писать 400кб кода на новый проект дописывать(естественно кроме них еще куча своих и чужихнаработок)?
Расскажи, как с сотнями файлов в блокноте работать ) Очень интересно ;)

Цитата

и использование двойных кавычек - проигрыш в читаемости кода
 Для тебя. Для всех остальных - иначе. Ссылка выше - подтверждение этого мнения.

Автор: youri 31.5.2009, 13:50
и что мы видим? Правила оформления кода субъективны (большей частью) - кто к чему привык, вы сами это отлично продемонстрировали  smile

Цитата
Для тебя. Для всех остальных - иначе. Ссылка выше - подтверждение этого мнения 

там так и написано, что "двойные кавычки для большинства читабельнее"?

Автор: source777 31.5.2009, 14:04
Цитата(bars80080 @  31.5.2009,  13:34 Найти цитируемый пост)
и использование двойных кавычек - проигрыш в читаемости кода 

С чего вдруг? Синтаксис PHP близок к синтаксису С++, следовательно всем людям знакомым с С++ будет гораздо легче читать код, в котором строки-литералы обрамлены двойными кавычками, а символы-литералы - одинарными. По той же причине лучше не использовать конструкции, включающие в себя : endif, : endforeach, etc. вместо {}.


Цитата(bars80080 @  31.5.2009,  13:34 Найти цитируемый пост)
не знаю что там из себя представляют IDE, всё что слышу о них порождает идею о пушке и воробьях. смысла в них вообще не вижу, если создание сайта у меня занимает всего 5 минут, путём копирования предыдущей версии. а далее дизайн, контент и размещение блоков. т.е. ничего общего с программированием на пхп.

Ну так если твоя работа вообще не связана с программированием на пхп, то с какой стати ты навязываешь своё мнение в теме, связанной с программированием на пхп? 

Цитата(bars80080 @  31.5.2009,  13:34 Найти цитируемый пост)
когда очередной раз здесь скидывают класс по БД с малопонятными конструкциями типа $db->fetch_row(), я спрашиваю себя, нафига вообще было писать такой код, который ни капельки не облегчает процесс написания? но все пользуются, я им не возражаю. но это не значит, что я должен брать тот же класс и юзать его
Ну тут 2 варианта, если ты вместо $db->fetch_row() используешь mysql_fetch_row(), то лучше бы тебе взять их класс и юзать его. А если ты вместо $db->fetch_row() используешь паттерн ActiveRecord, то смело возражай строителям велосипедов!



Автор: bars80080 31.5.2009, 14:07
Цитата(nerezus @  31.5.2009,  13:42 Найти цитируемый пост)
Никогда не приходилось писать 400кб кода на новый проект дописывать(естественно кроме них еще куча своих и чужихнаработок)?

нет. объём чистого кодинга на модуль - максимум 100кБ, и то это был жуткий аврал и нафигачивания одной новой компоненты на другую, т.е. архитектуры вообще не было. а так 10-30 кБ


Цитата(nerezus @  31.5.2009,  13:42 Найти цитируемый пост)
Расскажи, как с сотнями файлов в блокноте работать ) Очень интересно ;)

а кто сказал, что я работаю в блокноте? простенький редактор с подсветкой и закладочками сверху. больше пяти за раз открываю только в случае когда ищу что-нибудь зрительное (т.е. когда в поисковик нельзя вогнать)

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


Цитата(nerezus @  31.5.2009,  13:42 Найти цитируемый пост)
Для тебя. Для всех остальных - иначе. Ссылка выше - подтверждение этого мнения. 

что-то не видно ссылки. есть понятие привычки, а есть понятие удобства, не надо путать, я тоже вначале делал как завещал великий ... (фиг знает, кто там был в начале, но судя по всему суеверие очень живуче). я долго писал двойными кавычками, потом решил перейти на одинарные, вначале было неудобно, но за пару недель полностью перестроился. ошибок в разы уменьшилось. во-первых из-за такой банальности, что меньше чёрточек мельтешит перед глазами, во-вторых, кристально чётко отслеживается где переменная/константа/массив, а где литерал, также неожиданно перестроились строки кода. тут надо пояснить. при постоянных соединениях конкатенацией отдельных частей, естественно получается разбитие строк по точке, в отличие от двойных кавычек, где либо происходит уход строки за край экрана, либо съезд на следующую строку со зрительной разбивкой табовой структуры, либо введением разрыва страницы, который разрывает структуру уже в html-исходнике. короче это надо видеть и ощутить, а не слушать открыв рот других, только потому что это "уважаемые" программисты  из серьёзных проектов.

Автор: source777 31.5.2009, 14:07
Цитата(youri @  31.5.2009,  13:50 Найти цитируемый пост)
там так и написано, что "двойные кавычки для большинства читабельнее"?
это исторически сложилось благодаря С++. Т.к. любой программист знает много языков, то ему удобнее чтобы их синтасисы либо минимально отличались, либо кардинально. Иначе возникает резкое снижение читабельности из-за интерференции различных синтаксисов.

Автор: bars80080 31.5.2009, 14:08
Цитата(youri @  31.5.2009,  13:50 Найти цитируемый пост)
и что мы видим? Правила оформления кода субъективны (большей частью) - кто к чему привык, вы сами это отлично продемонстрировали  smile

Цитата
Для тебя. Для всех остальных - иначе. Ссылка выше - подтверждение этого мнения 

там так и написано, что "двойные кавычки для большинства читабельнее"?

читаем выше, написал почему я отошёл от двойных

Автор: source777 31.5.2009, 14:13
Цитата(bars80080 @  31.5.2009,  14:07 Найти цитируемый пост)
неожиданно перестроились строки кода. тут надо пояснить. при постоянных соединениях конкатенацией отдельных частей, естественно получается разбитие строк по точке, в отличие от двойных кавычек, где либо происходит уход строки за край экрана, либо съезд на следующую строку со зрительной разбивкой табовой структуры, либо введением разрыва страницы, который разрывает структуру уже в html-исходнике.

ты не смешивай в одну кучу выбор вида кавычек и выбор между конкатенацией и интерполяцией, они не связанны совершенно. Да и длина строк не связана с выбором между конкатенацией и интерполяцией.


Цитата(bars80080 @  31.5.2009,  14:07 Найти цитируемый пост)
кристально чётко отслеживается где переменная/константа/массив, а где литерал
Т.е. твой редактор не подсвечивал строки с двойными кавычками и интерполированные в них переменные? Смени редактор, он жестоко тебя ограничивает!

Автор: bars80080 31.5.2009, 14:15
Цитата(source777 @  31.5.2009,  14:04 Найти цитируемый пост)
С чего вдруг? Синтаксис PHP близок к синтаксису С++, следовательно всем людям знакомым с С++ будет гораздо легче читать код, в котором строки-литералы обрамлены двойными кавычками, а символы-литералы - одинарными. По той же причине лучше не использовать конструкции, включающие в себя : endif, : endforeach, etc. вместо {}.

не знаю лично ни одного кодера из C, который бы перешёл на пхп


Цитата(source777 @  31.5.2009,  14:04 Найти цитируемый пост)
Ну так если твоя работа вообще не связана с программированием на пхп, то с какой стати ты навязываешь своё мнение в теме, связанной с программированием на пхп? 

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


Цитата(source777 @  31.5.2009,  14:04 Найти цитируемый пост)
Ну тут 2 варианта, если ты вместо $db->fetch_row() используешь mysql_fetch_row(), то лучше бы тебе взять их класс и юзать его. А если ты вместо $db->fetch_row() используешь паттерн ActiveRecord, то смело возражай строителям велосипедов!

я вообще никаких подобных дикостей не использую. я пишу $db->select($sql); и получаю нужный мне массив данных упорядоченный в нужном порядке, с нужным количеством строк, да ещё и залогированный если нужно
Цитата(source777 @  31.5.2009,  14:07 Найти цитируемый пост)
это исторически сложилось благодаря С++. Т.к. любой программист знает много языков, то ему удобнее чтобы их синтасисы либо минимально отличались, либо кардинально. Иначе возникает резкое снижение читабельности из-за интерференции различных синтаксисов.

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

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

Автор: source777 31.5.2009, 14:16
Цитата(bars80080 @  31.5.2009,  14:08 Найти цитируемый пост)
читаем выше, написал почему я отошёл от двойных 

Я почитал, единственная крайне субъективная причина "меньше чёрточек мельтешит перед глазами", всё остальное вообще с видом кавычек не связано(конкатенацию с двойными кавычками никто не запрещал применять).

Автор: bars80080 31.5.2009, 14:23
Цитата(source777 @  31.5.2009,  14:13 Найти цитируемый пост)
ты не смешивай в одну кучу выбор вида кавычек и выбор между конкатенацией и интерполяцией, они не связанны совершенно. Да и длина строк не связана с выбором между конкатенацией и интерполяцией.

понятия не имею, что ты понимаешь здесь под интерполяцией.

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


Цитата(source777 @  31.5.2009,  14:13 Найти цитируемый пост)
Т.е. твой редактор не подсвечивал строки с двойными кавычками и интерполированные в них переменные? Смени редактор, он жестоко тебя ограничивает! 

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


Автор: source777 31.5.2009, 14:28
Цитата(bars80080 @  31.5.2009,  14:15 Найти цитируемый пост)
не знаю лично ни одного кодера из C, который бы перешёл на пхп

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


Цитата(bars80080 @  31.5.2009,  14:15 Найти цитируемый пост)
я пишу $db->select($sql); и получаю нужный мне массив данных упорядоченный в нужном порядке, с нужным количеством строк, да ещё и залогированный если нужно

ну это тот же велосипед, только в профиль. Почитай про http://github.com/kla/php-activerecord/tree/master.


Цитата(bars80080 @  31.5.2009,  14:15 Найти цитируемый пост)
имхо, если человек занимается одновременно разными направлениями, то если он не является гением
Да, нет я знаю много программистов, и не один из них не ограничивает себя одним языком.


Цитата(bars80080 @  31.5.2009,  14:15 Найти цитируемый пост)
то возникает вопрос о качественности его работы в отдельном направлении. именно по этой причине я не стал даже соваться в asp и .net, т.к. хотел всё-таки подняться над уровнем примитивов в пхп
Чем шире кругозор, тем выше уровень. На одном пхп на высокого уровня не достигнешь, скорее наоборот, слишком низкая входная планка не лучшим образом отражается на php-сообществе, даже крупные открытые проекты(типа CMS, форумов) порой выпускают такой быдлокод, что тошно в него даже заглядывать. Так что причина у тебя в корне неправильная. 


Цитата(bars80080 @  31.5.2009,  14:15 Найти цитируемый пост)
а при отдельныз разработках, то перестроится на другой синтаксис не представляет труда. мы же не пишем в пхп := , и при этом не испытываем никакого дискомфорта при переходе на другие системы? 

Я про это и написал: "синтасисы либо минимально отличались, либо кардинально", если брать пару Delphi - PHP, то различие в синтаксисе кардинальное,  а если С++ - PHP, то надо сводить различия к минимуму, т.к. кардинального отличия не получится, как не старайся.

Автор: bars80080 31.5.2009, 14:29
Цитата(source777 @  31.5.2009,  14:16 Найти цитируемый пост)
всё остальное вообще с видом кавычек не связано(конкатенацию с двойными кавычками никто не запрещал применять). 

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

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

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

Автор: source777 31.5.2009, 14:33
Цитата(bars80080 @  31.5.2009,  14:23 Найти цитируемый пост)
понятия не имею, что ты понимаешь здесь под интерполяцией.
Интерполяция - подстановка значений переменных в строку, вместо их идентификаторов, аля "val = $val" -> "val = 5". 
Это не я придумал так называть данный механизм smile

Добавлено через 1 минуту и 18 секунд
Цитата(bars80080 @  31.5.2009,  14:29 Найти цитируемый пост)
так бессмысленно её применять с двойными кавычками.
с чего это ты взял?

Автор: bars80080 31.5.2009, 14:37
Цитата(source777 @  31.5.2009,  14:28 Найти цитируемый пост)
А мы оказывается про кодеров говорим? Я то думал про нормальных программистов, которые язык выбирают под конкретную задачу, а не переходят с одного на другой.

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


Цитата(source777 @  31.5.2009,  14:28 Найти цитируемый пост)
ну это тот же велосипед, только в профиль. 

ну не знаю, если для тебя 

$db->select($sql)

и 
$s = $db->select($sql);
while($db->fetch_row($s)) {
   $b = ....
}
одно и тоже, то не знаю даже что и говорить


Цитата(source777 @  31.5.2009,  14:28 Найти цитируемый пост)
Чем шире кругозор, тем выше уровень. На одном пхп на высокого уровня не достигнешь, скорее наоборот, слишком низкая входная планка не лучшим образом отражается на php-сообществе, даже крупные открытые проекты(типа CMS, форумов) порой выпускают такой быдлокод, что тошно в него даже заглядывать.

вооот, а мне тут советуют озираться на "специалистов"


Цитата(source777 @  31.5.2009,  14:28 Найти цитируемый пост)
Почитай про ActiveRecord.

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


Цитата(source777 @  31.5.2009,  14:28 Найти цитируемый пост)
Я про это и написал: "синтасисы либо минимально отличались, либо кардинально", если брать пару Delphi - PHP, то различие в синтаксисе кардинальное,  а если С++ - PHP, то надо сводить различия к минимуму, т.к. кардинального отличия не получится, как не старайся. 

это уже что-то из: я вижу разницу между #ccccc8 и #ccccca, а я нет

Добавлено через 3 минуты и 6 секунд
Цитата(source777 @  31.5.2009,  14:33 Найти цитируемый пост)
Интерполяция - подстановка значений переменных в строку, вместо их идентификаторов, аля "val = $val" -> "val = 5". 
Это не я придумал так называть данный механизм

не знаю, в моём понимании интерполяция - придумывание промежуточных значений на базе уже существующих. тоже не я придумал

и что ты хотел сказать? я и не заикался о замене
Цитата(source777 @  31.5.2009,  14:33 Найти цитируемый пост)
так бессмысленно её применять с двойными кавычками.
с чего это ты взял?

а зачем лишний раз разрывать строку, если переменная так и просится остаться внутри литерала?

Автор: youri 31.5.2009, 14:44
Цитата
но за пару недель полностью перестроился

Цитата(bars80080 @  31.5.2009,  14:15 Найти цитируемый пост)
а при отдельныз разработках, то перестроится на другой синтаксис не представляет труда. мы же не пишем в пхп := , и при этом не испытываем никакого дискомфорта при переходе на другие системы?

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

Цитата(source777 @  31.5.2009,  14:07 Найти цитируемый пост)
это исторически сложилось благодаря С++. Т.к. любой программист знает много языков, то ему удобнее чтобы их синтасисы либо минимально отличались, либо кардинально. Иначе возникает резкое снижение читабельности из-за интерференции различных синтаксисов

похоже за этим стоит серьезное научное исследование smile

Цитата(bars80080 @  31.5.2009,  14:08 Найти цитируемый пост)
читаем выше, написал почему я отошёл от двойных

а рядом причины использовать двойные кавычки

Цитата(source777 @  31.5.2009,  14:13 Найти цитируемый пост)
ты не смешивай в одну кучу выбор вида кавычек и выбор между конкатенацией и интерполяцией, они не связанны совершенно

для кого-то связаны

Автор: source777 31.5.2009, 14:49
Цитата(bars80080 @  31.5.2009,  14:37 Найти цитируемый пост)
я думал в теме мы обсуждаем вэб-проекты основанные на пхп.
веб-проекты можно делать не только на пхп, поэтому надо чётко разделять понятия пхп-кодер и веб-программист, в этих понятиях крайне мало общего.


Цитата(bars80080 @  31.5.2009,  14:37 Найти цитируемый пост)
ну не знаю, если для тебя 

$db->select($sql) 

и 
$s = $db->select($sql);
while($db->fetch_row($s)) {
   $b = ....
}
одно и тоже, то не знаю даже что и говорить
В первом варианте обработка выборки прямо внутри select? шикарно  smile 
И то и то велосипед с квадратными колёсами, да ёще и raw-SQL на входе, ужос короче, лучше с подобным кодом дела не иметь. 

Цитата(bars80080 @  31.5.2009,  14:37 Найти цитируемый пост)
я особо читать не стал. что ты мне хотел показать, кроме того, что там человек пользуется одинарными кавычками?
Причём там кавычки? Тут выясняется, что ты велосипедами для общения с БД пользуешься, кавычки по сравнению с таким косяком вообще уже роли не играют.

Добавлено через 5 минут и 50 секунд
Цитата(youri @  31.5.2009,  14:44 Найти цитируемый пост)
для кого-то связаны
это их проблемы. Смысл в том, что использование тех или иных кавычек никак не должно входить в "Правила хорошего кода", это личное дело каждого и никакого улучшения читабельности при использовании одинарных кавычек нет, поэтому я против того навязывания одинарных кавычек, которое развернули в этой теме.

Автор: youri 31.5.2009, 14:56
итого, 3 точки зрения по поводу того, какие правила лучше
<погорячился>

Автор: source777 31.5.2009, 14:56
Цитата(youri @  31.5.2009,  14:44 Найти цитируемый пост)
похоже за этим стоит серьезное научное исследование smile
как ты догадался, оно ж секретное!

Автор: youri 31.5.2009, 15:01
откуда вообще вот это взялось?
http://framework.zend.com/manual/en/coding-standard.coding-style.html
http://pear.php.net/manual/en/standards.php
http://drupal.org/coding-standards
http://tony2001.phpclub.net/doc/standard/
казалось бы придумали для php одни правила - так нет же, свои придумывают
пожалуйста, объясните зачем им каждому свои правила?  smile 

Автор: nerezus 31.5.2009, 15:02
Цитата

там так и написано, что "двойные кавычки для большинства читабельнее"?
 http://framework.zend.com/manual/ru/coding-standard.coding-style.html#coding-standard.coding-style.strings.variable-substitution

Цитата

нет. объём чистого кодинга на модуль - максимум 100кБ, и то это был жуткий аврал и нафигачивания одной новой компоненты на другую, т.е. архитектуры вообще не было. а так 10-30 кБ
 Я не про модуль, а про проект.

Цитата

хм, интересно, что это за дикий кодинг в котором приходится работать с сотней файлов одновременно?
 ~20 файлов моделей, ~150 файлов шаблонов, ~30 модулей, ~50 файлов ядра и common, 2k+ файлов чужих библиотек, в которые тоже иногданадо залезть.
Естественно открыто ~7 файлов одновременно, остальные учавствуют в автодополнении кода и подсказках. 

Цитата

во-первых из-за такой банальности, что меньше чёрточек мельтешит перед глазами, во-вторых, кристально чётко отслеживается где переменная/константа/массив, а где литерал, также неожиданно перестроились строки кода.
 Черточки не изменятся. В двойных тоже все норм. В IDE.

Цитата

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

Цитата

не знаю лично ни одного кодера из C, который бы перешёл на пхп
 Я знаю лишь одного программиста на C, который не перешел на другой ЯП.
Хотя ты возможно путаешь C и C++, это абсолютно разные языки.

Цитата

Смени редактор, он жестоко тебя ограничивает!
 +1. Бруно сожгли только за то, что он говорил людям, чтобы они не придумывали себе ограничений.

Добавлено через 9 минут и 3 секунды
Цитата

казалось бы придумали для php одни правила - так нет же, свои придумывают
пожалуйста, объясните зачем им каждому свои правила?
 Я пишу в .NET по Java style(слегка модифицированный K&R style) т.к. занимаемый код без потерь в читаемости занимает в 2 раза меньше места и за ним проще следить.

Автор: bars80080 31.5.2009, 15:42
Цитата(nerezus @  31.5.2009,  15:02 Найти цитируемый пост)
Я не про модуль, а про проект.

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


Цитата(nerezus @  31.5.2009,  15:02 Найти цитируемый пост)
~20 файлов моделей, ~150 файлов шаблонов, ~30 модулей, ~50 файлов ядра и common, 2k+ файлов чужих библиотек, в которые тоже иногданадо залезть.
Естественно открыто ~7 файлов одновременно, остальные учавствуют в автодополнении кода и подсказках. 

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


Цитата(nerezus @  31.5.2009,  15:02 Найти цитируемый пост)
Черточки не изменятся. В двойных тоже все норм. В IDE.

уже отписался
Цитата(nerezus @  31.5.2009,  15:02 Найти цитируемый пост)
 Я пришел к тому же стилю, как и они. Так было удобнее. Я разделяю мннение большинства.
уже отписался
Цитата(nerezus @  31.5.2009,  15:02 Найти цитируемый пост)
Я знаю лишь одного программиста на C, который не перешел на другой ЯП.

забавно, порождает интересные размышления об избыточности изучения этого языка
Цитата(nerezus @  31.5.2009,  15:02 Найти цитируемый пост)
 +1. Бруно сожгли только за то, что он говорил людям, чтобы они не придумывали себе ограничений.
уже отписался

Автор: Elfet 31.5.2009, 17:30
Цитата(source777 @  31.5.2009,  15:49 Найти цитируемый пост)
Цитата(bars80080 @  31.5.2009,  14:37 Найти цитируемый пост)
ну не знаю, если для тебя 

$db->select($sql) 

и 
$s = $db->select($sql);
while($db->fetch_row($s)) {
   $b = ....
}
одно и тоже, то не знаю даже что и говорить
В первом варианте обработка выборки прямо внутри select? шикарно  smile 
И то и то велосипед с квадратными колёсами, да ёще и raw-SQL на входе, ужос короче, лучше с подобным кодом дела не иметь. 

Цитата(bars80080 @  31.5.2009,  14:37 Найти цитируемый пост)
я особо читать не стал. что ты мне хотел показать, кроме того, что там человек пользуется одинарными кавычками?
Причём там кавычки? Тут выясняется, что ты велосипедами для общения с БД пользуешься, кавычки по сравнению с таким косяком вообще уже роли не играют.

Что то тут я не очень понял? Что за велосипед? Я, например, DbSimple пользуюсь, там тоже на это похоже. А этот активрекорд, как мне показалось - шаг назад. 

Автор: nerezus 31.5.2009, 17:34
Цитата

страх какой. т.е. выполнение одного клика пользователя вызывает движуху по нескольким сотням файлов?
Да, а что?
Сейчас 2009 год, сервер арендовать на месяц дешевле, чем программисту день работы оплатить.
И, кстати, советую почитать что-то про оптимизацию ;)

Цитата

порождает интересные размышления об избыточности изучения этого языка
 Просто он легкий. Хотя я за начало обучения программированию на Java - и очень простой, и мощный ЯП.

Update: http://rsdn.ru/article/philosophy/Optimization.xml

Автор: bars80080 31.5.2009, 17:48
Цитата(nerezus @  31.5.2009,  17:34 Найти цитируемый пост)
Да, а что?
Сейчас 2009 год, сервер арендовать на месяц дешевле, чем программисту день работы оплатить.
И, кстати, советую почитать что-то про оптимизацию ;)

мне читать про оптимизацию? smile  ты советуешь мне читать про оптимизацию?

тут кто-то жаловался, что лишний десяток инклудов заметно сказывается на времени работы скриптов

а я ещё думаю, почему vz.ru надо сидеть ждать полминуты пока загрузится, почему mail.ru вешает мне браузер. думал количество посетителей много, а проблемы возможно в корне

Автор: nerezus 31.5.2009, 17:55
Цитата

мне читать про оптимизацию?   ты советуешь мне читать про оптимизацию?

тут кто-то жаловался, что лишний десяток инклудов заметно сказывается на времени работы скриптов

а я ещё думаю, почему vz.ru надо сидеть ждать полминуты пока загрузится, почему mail.ru вешает мне браузер. думал количество посетителей много, а проблемы возможно в корне
 Судя по всему тебе всенепременно стоит прочитать эту статью. Там на эти твои вопросы ответили.

Автор: source777 31.5.2009, 18:19
Цитата(Elfet @  31.5.2009,  17:30 Найти цитируемый пост)
Что то тут я не очень понял? Что за велосипед? Я, например, DbSimple пользуюсь, там тоже на это похоже. А этот активрекорд, как мне показалось - шаг назад.  
Посмотрел на DbSimple, тоже старый велосипедный подход используется, тот же raw-SQL, не советую пользоваться подобными поделками. Лучше обрати внимание на http://martinfowler.com/eaaCatalog/.

Автор: Elfet 31.5.2009, 19:02
source777, что это за набор паттернов? 

Тот класс для работы с БД, что ты показывал до этого как я понял не использует SQL, за место него работает объектная модель? Я думаю, что это неправильно, так как не зря же придумали SQL? Могли бы и сразу делать объектно, без всяких других языков.

Автор: bars80080 31.5.2009, 19:15
Цитата(nerezus @  31.5.2009,  17:55 Найти цитируемый пост)
Судя по всему тебе всенепременно стоит прочитать эту статью. Там на эти твои вопросы ответили. 

да что за статья-то?

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

Автор: nerezus 31.5.2009, 19:25
Цитата

и ты хочешь сказать, что десять файлов подключать лучше, чем один того же объёма?
 Я хочу сказать, что разницы нет.
И кстати не забывай, что php-файл после компиляции кэшируется при правильной настройке PHP ;)

Автор: source777 31.5.2009, 19:35
Цитата(Elfet @  31.5.2009,  19:02 Найти цитируемый пост)
source777, что это за набор паттернов? 
PoEAA.

Цитата(Elfet @  31.5.2009,  19:02 Найти цитируемый пост)
Тот класс для работы с БД, что ты показывал до этого как я понял не использует SQL, за место него работает объектная модель? Я думаю, что это неправильно
Проще говоря, ты не используешь ООП, а ставишь БД во главу угла. Если ты пишешь только сайты-визитки, то пожалуйста, а в крупных веб-приложениях такой подход просто недопустим. Кстати SQL этот подход использует, только он его изолирует в одном месте - ActiveRecordBase и его потомки.


Цитата(Elfet @  31.5.2009,  19:02 Найти цитируемый пост)
Я думаю, что это неправильно, так как не зря же придумали SQL? Могли бы и сразу делать объектно, без всяких других языков. 
Тут ты не прав, SQL зародился очень давно(ещё в 70-х годах), в то время его не могли сделать объектно, а сейчас мгновенный отказ от реляционных СУБД уже просто невозможен, но идёт плавный переход от них в сторону объектно-реляционных и объектно-ориентированных СУБД. И самое забавное, что сами создатели реляционной модели данных утверждают, что SQL не является истинно реляционным языком(и забросив его принялись за Tutorial D). 
Но даже при использовании реляционных СУБД уже давно всем понятно, что SQL никак не вяжется с современным объектно-ориентированным программированием, поэтому все запросы должны быть изолированы в одном месте, а не разбросаны хаотичными вкраплениями по всему коду.

Автор: Elfet 31.5.2009, 20:42
source777, а есть ещё альтернативы ActiveRecordBase? 

Автор: Wowa 31.5.2009, 21:30
Цитата(bars80080 @  31.5.2009,  14:42 Найти цитируемый пост)
страх какой. т.е. выполнение одного клика пользователя вызывает движуху по нескольким сотням файлов?

Ну код же надо разделять. А пихать всё в один файл нельзя, т.к. тогда куча лишнего грузиться будет. Байт-код пхп-файлов в памяти кешируется и подключение должно быть более-менее быстрым. Хотя конечно тоже время занимает и пара сотня файлов это перебор, но от подключения нескольких десятков файлов имхо никуда не уйти.

Автор: source777 31.5.2009, 22:20
Цитата(Elfet @  31.5.2009,  20:42 Найти цитируемый пост)
source777, а есть ещё альтернативы ActiveRecordBase?  
Есть, по ссылке выше смотри пункт Data Source Architectural Patterns.

Автор: SneG0K 31.5.2009, 22:24
Хороший код должен быть:
1) Хорошо читаемым
2) Хорошо документированным
3) Хорошо оптимизированным

Имхо. требования к написанию меняются от команды к команде... 

Автор: youri 31.5.2009, 22:50
Цитата(SneG0K @  31.5.2009,  22:24 Найти цитируемый пост)
Имхо. требования к написанию меняются от команды к команде... 

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

Автор: bars80080 31.5.2009, 23:26
Цитата(Wowa @  31.5.2009,  21:30 Найти цитируемый пост)
Ну код же надо разделять. А пихать всё в один файл нельзя

так я ж про то и говорю, сто файлов подключаются одновременно. это же с ума сойти

Автор: Wowa 31.5.2009, 23:27
Кстати, рекламируемая тут ActiveRecordBase как раз подразумевает создание большого кол-ва файлов. По файлу на класс объекта.

Автор: SneG0K 31.5.2009, 23:29
Цитата(bars80080 @  31.5.2009,  22:26 Найти цитируемый пост)
так я ж про то и говорю, сто файлов подключаются одновременно. это же с ума сойти

Это не с ума сойти, а хороший API интерфейс, наверноеsmile... В данном случае кеширование спасет мир. Например, установи pear'овскую ACP. Иногда скорость выполнения повышалась до 83%

Автор: nerezus 31.5.2009, 23:47
Цитата

это же с ума сойти
 Это просто большой проект.

Автор: source777 1.6.2009, 11:16
Цитата(SneG0K @  31.5.2009,  23:29 Найти цитируемый пост)
Например, установи pear'овскую ACP
APC  smile или eAccelerator, это вполне естественные меры для компенсации ущербной модели распространённой для PHP, когда весь код интерпретируется заново при каждом запросе.

Автор: SneG0K 1.6.2009, 11:21
Цитата(source777 @  1.6.2009,  10:16 Найти цитируемый пост)
когда весь код интерпретируется заново при каждом запросе.

А это уже вина администраторов.

Автор: realPROme 2.6.2009, 14:43
незнаю, насколько это считается правилом хорошего тона...))
константы пишу СТРОЧНЫМИ, как уже говорили, а названия переменных для массивов начинаю с символа подчеркивания, а-ля $_array
привычка такая пошла, походу, с $_GET/POST smile 

Автор: SneG0K 2.6.2009, 15:04
А я просто обзываю переменные и массивы понятно

Автор: Serkys 2.6.2009, 22:30
Цитата(realPROme @  2.6.2009,  15:43 Найти цитируемый пост)
подчеркивания, а-ля $_array

Не думаю, что это хорошая мысль. Подчёркиванием предваряются private и protected свойства класса.
Можете посмотреть в сторону венгерской нотации, если вам удобно выносить тип переменной в её имя, но это тоже не лучшая мысль с точки зрения рефакторинга.

Автор: mogul82 8.6.2009, 01:17
Я пишу как мне любимому нравиться, а на мнения др. кто там будет работать с моим кодом мне насрать.

Автор: nerezus 8.6.2009, 01:48
Цитата

Я пишу как мне любимому нравиться, а на мнения др. кто там будет работать с моим кодом мне насрать.
 А вот если программистом работать будешь когда-нибудь - то придется )

Автор: mogul82 8.6.2009, 10:13
Цитата(nerezus @  8.6.2009,  01:48 Найти цитируемый пост)
 А вот если программистом работать будешь когда-нибудь - то придется )


Да я ващето им и работаю 2 года. Переделал кучу сайтов.

Автор: bars80080 8.6.2009, 10:41
Цитата(mogul82 @  8.6.2009,  10:13 Найти цитируемый пост)
Да я ващето им и работаю 2 года. Переделал кучу сайтов. 

ну, вот как попадёт в руки творение такого же товарища как ты, станешь последователем древней секты е*аллы, так и поймёшь, что к чему

Автор: MoLeX 8.6.2009, 12:17

 ! 
MoLeX
Модератор: mogul82 все претензия к барсу ему в личку

Автор: nerezus 8.6.2009, 12:44
Цитата

Да я ващето им и работаю 2 года. Переделал кучу сайтов.
 Ага, в одиночку. А в команде работать придется ;) Либо не будешь писать ###код, либо выпрут.

Автор: Cheburek 5.7.2009, 20:25
А я взял за основу http://www.rsdn.ru/article/mag/200401/codestyle.XML. Только с фигурными скобками мне все-таки удобнее писать:
Код

if (condition) {
    ...

else {
    ...
}
for (int i = 0; i < 5; ++i) {
    ...
}
try {
    ...
}
catch {
...
}
//Но, для классов и функции.
class MyClass
{
   //Стиль кэмел.
   public function myMetod()
   {
     ...
    }
}
//Тоже стиль кэмел.
function myFunction()
{
...
}

Автор: LittleFuntik 7.7.2009, 15:55
А мне все-равно.
Главное, что-бы все работало красиво и быстро.
Просто у меня для каждого настроения свой стандарт написания кода smile 

Автор: godson 16.7.2009, 11:45
Цитата(Alone @ 6.10.2005,  10:32)
в строках, при использовании переменных, обязательно выделяю их вот так
Код

$str="Hello ".$name."! I see you!";


require/include - в скобках. это больше для красоты. require_once("MyClass.php");

ИМХО хорошим стандартом (для PHP 5) писать строки так:

Код

$str = "Hello {$name}!. I see you!";


Насчет require_once: желательно написать autoload фукнцию (опять же для PHP5) и множество require пропадут из кода smile

Добавлено через 9 минут
Еще хорошим правилом является добавление префиксов к именам переменных 
Например

Код

//Массив
$aArray = array(1,2,3);

//Строка
$sString = "eeeee";

//Число
$iInt = 123;

//Файл
$fFile = fopen("eee.txt", "a+");

//Объект
$oObject = new MyClass();

Автор: nerezus 16.7.2009, 12:09
Цитата

Еще хорошим правилом является добавление префиксов к именам переменных 
Например
 Так делали, пока IDE не придумали, кстати.
В виндовых апи остались пережитки.

Гораздо проще возвращаемый тип функции описать, а IDE сама тип подскажет.
Тем более как будешь объекты именовать?
someClassSomeInstance?)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)