Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Хороший стиль программироваия
 
 автор: FireTiger   (18.02.2008 в 12:00)   письмо автору
 
 

Как только я выучил основы PHP, у меня появилось очень много идей которые можно было бы воплотить. Я начал свою работу :)
Но программируя, я пишу код незная правильно ли я его пишу...
Как мне знать что мой код правильно написан? Как знать что он будет быстро работать? Как знать нет ли более выгодной реализации задачи?

   
 
 автор: vitali   (18.02.2008 в 13:11)   письмо автору
 
   для: FireTiger   (18.02.2008 в 12:00)
 

См. статью: http://www.softtime.ru/article/index.php?id_article=28

   
 
 автор: FireTiger   (18.02.2008 в 13:21)   письмо автору
 
   для: vitali   (18.02.2008 в 13:11)
 

Спасибо! Почему я не заметил этой статьи... :)
Вот хотел спросить, как лучше писать строки, так:

echo "переменная = ".$var."<br>";

вот так:

echo "переменная = {$var}<br>";

или так:

echo 'переменная = '.$var.'<br>';

В первом случае строка записанная в двойные кавычки дополнительно обрабатывается, проверяя нет ли там переменной чтобы ее обработать.
Во-втором случае переменная в кавычках интерполируется, и втретьем - текст выводидся так как есть, и переменная выводится так как есть. Лично я привык все делать 3 способом, но строка получается хуже читаемой...Как лучше?

   
 
 автор: cheops   (18.02.2008 в 13:44)   письмо автору
 
   для: FireTiger   (18.02.2008 в 13:21)
 

Чем меньше символов, тем лучше, поэтому для простых переменных, с точки зрения читабельности лучше писать так
<?php
  
echo "переменная = $var<br>";
?>

Если интерполируются сложная конструкция, например, элемент двумерного массива, то лучше писать следующим образом
<?php
  
echo "переменная = {$var[0][1]}<br>";
?>

   
 
 автор: Gemorroj   (18.02.2008 в 13:54)   письмо автору
 
   для: cheops   (18.02.2008 в 13:44)
 

При всем уважении к товарищу cheops'у, хочу возразить. Считаю что правильно будет все же так
<?php
echo 'переменная = '.$var.'<br/>';
?>

или так
<?php
echo 'переменная = '.$var[0][1].'<br/>';
?>

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

   
 
 автор: FireTiger   (18.02.2008 в 14:53)   письмо автору
 
   для: Gemorroj   (18.02.2008 в 13:54)
 

Еще такой вопрос:
А количество коментариев не замедляет работу скрипта? Скажем если коментариев в программе больше чем самого кода и файл уже будет в два раза больше. Скорость меньше не будет?

   
 
 автор: Gemorroj   (18.02.2008 в 15:01)   письмо автору
 
   для: FireTiger   (18.02.2008 в 14:53)
 

Теоретически влияет, но очень очень мало. Фактически можно сказать не влияет. Комментарии следует писать.

   
 
 автор: cheops   (19.02.2008 в 11:31)   письмо автору
 
   для: Gemorroj   (18.02.2008 в 13:54)
 

А критерий правильности какой?

   
 
 автор: Gemorroj   (19.02.2008 в 14:27)   письмо автору
 
   для: cheops   (19.02.2008 в 11:31)
 

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

   
 
 автор: FireTiger   (18.02.2008 в 14:05)   письмо автору
 
   для: cheops   (18.02.2008 в 13:44)
 

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

   
 
 автор: Gemorroj   (18.02.2008 в 14:11)   письмо автору
 
   для: FireTiger   (18.02.2008 в 14:05)
 

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

   
 
 автор: FireTiger   (18.02.2008 в 14:45)   письмо автору
 
   для: Gemorroj   (18.02.2008 в 14:11)
 

C Вами полностью согласен, добавлю этот момент к своему хорошому стилю программирования :)

   
 
 автор: Akdmeh   (18.02.2008 в 14:50)   письмо автору
 
   для: Gemorroj   (18.02.2008 в 14:11)
 

У меня подобная школа: 'переменная: '.$var.'<br>';-это самый быстрый способ из всех приведенных. Но не думаю,что это главное-есть и много других вещей,о которых нужно помнить-например,малопонятные названия,большие циклы,слишком много переменных,плохая обработка входящих данных,игнорирование принципов юзабилити...

   
 
 автор: FireTiger   (18.02.2008 в 16:34)   письмо автору
 
   для: Akdmeh   (18.02.2008 в 14:50)
 

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

Например, все переменные связанные с отправкой email сообщений. Я их именую так: $email_{переменная}. Лично для меня удобно, но потом возникают случаи, когда переменные делятся по разделам и подразделам и т.д. Т.е. мне приходится писать все эти префиксы перечисляя, например, $email_send_ok и т.д. Как быть в таком случае, когда таких префиксов собирается целая куча?
aaa

   
 
 автор: bronenos   (18.02.2008 в 16:42)   письмо автору
 
   для: FireTiger   (18.02.2008 в 16:34)
 

$email['send']['ok']
$email_sent

   
 
 автор: cheops   (19.02.2008 в 11:30)   письмо автору
 
   для: FireTiger   (18.02.2008 в 14:05)
 

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

   
 
 автор: Саня   (19.02.2008 в 12:36)   письмо автору
 
   для: cheops   (19.02.2008 в 11:30)
 

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

   
 
 автор: FireTiger   (19.02.2008 в 14:03)   письмо автору
 
   для: Саня   (19.02.2008 в 12:36)
 

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


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

   
 
 автор: bronenos   (19.02.2008 в 14:12)   письмо автору
 
   для: FireTiger   (19.02.2008 в 14:03)
 

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

   
 
 автор: FireTiger   (19.02.2008 в 18:25)   письмо автору
 
   для: bronenos   (19.02.2008 в 14:12)
 

А объекты не тормозят скорость работы?

   
 
 автор: cheops   (20.02.2008 в 02:14)   письмо автору
 
   для: FireTiger   (19.02.2008 в 18:25)
 

В PHP тормозят.

   
 
 автор: FireTiger   (20.02.2008 в 06:42)   письмо автору
 
   для: cheops   (20.02.2008 в 02:14)
 

Т.е. их нужно использовать в самом обрезаном виде, чем меньше тем лучше?

   
 
 автор: cheops   (20.02.2008 в 13:31)   письмо автору
 
   для: FireTiger   (20.02.2008 в 06:42)
 

Да нет, их как и везде следует использовать, когда это позволяет проще решить задачу, добить какой-то выгоды (сократить время разработки, уменьшить размер кода, увеличить повторное использование кода). Используя PHP вместо ассеблера или C вы расплачиваетесь скоростью, но вас это не волнует, так как скорость вашей разработки и количество ошибок в Web-приложении, а следовательно и его качество возрастает при таком переходе значительно. Если вы знаете зачем используете классы - это всегда выгодный обмен скорости на что-то ещё. Если вы не знаете зачем вы решили использовать объектно-ориентированный подход, даже если скорость не падает - использовать его не стоит :)

   
 
 автор: FireTiger   (21.02.2008 в 08:17)   письмо автору
 
   для: cheops   (20.02.2008 в 13:31)
 

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

   
 
 автор: Trianon   (19.02.2008 в 14:25)   письмо автору
 
   для: cheops   (19.02.2008 в 11:30)
 

>Читабельный код, содержит минимальное количество символов

Это для кого как.
Буквально вчера меня попросили помочь поделить csv--файл на группы строк по категориям.
Я набросал фрагмент, а потом его пришлось искусственно раздувать мусором, чтобы подчеркнуть логику работы.


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

Фрагменты приведены в порядке регресса:
<?php

$csv 
file("file.csv"'r'); 

$list = array(); $idx 0;
foreach(
$csv as $line)
    
$list[$line += $line[0] != ';'] = trim($line);

?>


<?php

$csv 
file("file.csv"'r'); 

$list = array(); $idx 0;
foreach(
$csv as $line)
{
    
$line += $line[0] != ';';
    
$list[$idx] = trim($line);
}

?>


<?php

$csv 
file("file.csv"'r'); 

$list = array(); $idx 0;
foreach(
$csv as $line)
{
    if(
$line[0] != ';')
    {
       ++
$idx;
    }
    
$list[$idx] = trim($line);
}

?>

   
 
 автор: Gemorroj   (19.02.2008 в 14:35)   письмо автору
 
   для: Trianon   (19.02.2008 в 14:25)
 

>Фрагменты приведены в порядке регресса
т.е. это лучший вариант?
<?php 

$csv 
file("file.csv"'r');  

$list = array(); $idx 0
foreach(
$csv as $line
    
$list[$line += $line[0] != ';'] = trim($line); 

?>

Прямо страшно даже, в одной теме возражу и cheops'у и Trianon'у =D
Ведь разработчики PHP советуют чаще использовать скобки, т.е.
в данном случае вот так
<?php 

$csv 
file("file.csv"'r');  

$list = array(); $idx 0
foreach(
$csv as $line) {
    
$list[$line += $line[0] != ';'] = trim($line);
}

?>

   
 
 автор: Trianon   (19.02.2008 в 15:16)   письмо автору
 
   для: Gemorroj   (19.02.2008 в 14:35)
 

>>Фрагменты приведены в порядке регресса
>т.е. это лучший вариант?

Т.е этот вариант набирался в редакторе.
А остальные строились путем перегруппировки строк и разбавления кода скобками.


> в данном случае вот так
Что - так?

И еще... Это Ваше личное возражение? Или возражение неких разработчиков PHP?

   
 
 автор: Gemorroj   (19.02.2008 в 15:27)   письмо автору
 
   для: Trianon   (19.02.2008 в 15:16)
 

Естесственно это мое личное возражение, основанное на рекомендациях разработчиков интерпретатора.
>Что - так?
Скобки там в коде добавил.

   
 
 автор: Trianon   (19.02.2008 в 15:40)   письмо автору
 
   для: Gemorroj   (19.02.2008 в 15:27)
 

Могли бы просто выбрать второй или третий вариант. Они там уже были.

   
 
 автор: Poison   (20.02.2008 в 08:17)   письмо автору
 
   для: Trianon   (19.02.2008 в 14:25)
 

В первом и втором вариантах опечатка?)

Имхо самый "приятный" это 3=)

   
 
 автор: Trianon   (20.02.2008 в 10:53)   письмо автору
 
   для: Poison   (20.02.2008 в 08:17)
 

скорее во всех трех.

<?php

$csv 
file("file.csv");

$list = array(); $idx 0;
foreach(
$csv as $line)
    
$list[$idx += $line[0] != ';'][] = trim($line);

print_r($list);
?>


<?php

$csv 
file("file.csv");

$list = array(); $idx 0;
foreach(
$csv as $line)
{
   
$idx += $line[0] != ';';
   
$list[$idx][] = trim($line);
}
print_r($list);
?>


<?php

$csv 
file("file.csv");

$list = array(); $idx 0;
foreach(
$csv as $line)
{
   if(
$line[0] != ';')
       
$idx++; 
   
$list[$idx][] = trim($line);
}
print_r($list);
?>

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования