Php пробел перенос строки

Правила прописания грамотного кода на PHP

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

Когда вы работаете в крупной компании в которой по мимо вас есть еще несколько программистов, то вам приходится работать с чужим кодом. Для того чтобы чтение кода было удобным для всех, придумали «Правила прописания исходного кода».

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

Правила переноса строки

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

Если строка превышает этот размер, то нужно использовать правила переноса строки:

  • переносить можно после запятой или перед оператором;
  • переносимая строка должна быть сдвинута относительно верхней на один символ табуляции;

Пробелы и табуляция

Пробелы и табуляции несут разные функции. Для тех кто не знает, табуляция — это отступ, который выполняется нажатием на клавишу Tab и равен 8 пробелам. Табуляция, так же отличается тем, что в некоторых компиляторах она может регулироваться в настройках и вы можете указать нужную для вас длину отступов.

В каких случаях ставится табуляция:

  • Используется при переносе строк (правило, выше)
  • Используется для обозначения подчиненности.

В каких случаях ставится пробел:

  • Один пробел используется в объявлении методов после запятой, но не перед скобками: TestMethod($a, $b, $c); Примеры неправильного использования:
    • TestMethod($a,$b,$c);
    • TestMethod( $a, $b, $c );

    Правила расстановки фигурных скобок

    Открывающая скобка должна ставиться под соответствующим оператором и на одном отступе с ним. Закрывающая скобка должна ставится под соответствующей открывающей.

    Использование тернарного оператора «?:»

    Условие следует заключать в скобки, тем самым отделяя его от остального кода. По возможности, действия, производимые по условию, должны быть простыми функциями. Если весь блок ветвления плохо читается, то стоит заменить его на if/else.

    Пример: ((условие) ? funct1() : func2());

    Выражения

    Желательно, чтобы в каждой строчке присутствовало только одно выражение.

    Пример. Неправильно писать так:

    Инструкции «if», «else», «while» и т.п.

    Допустимы два вида написания инструкций:

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

    if (условие) действие1; else действие2;

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

    Пример. Неправильно писать так:

    if ($a == 0) $a = 10; else< $a = 5; $b = 10;>
    if ($a == 0) < $a = 10; > else < $a = 5; $b = 10; >

    Сложные инструкции

    Сложные инструкции следует разбивать по строкам. Например,

    if(COption::GetOptionString("main", "new_user_registration", "N")=="Y" && $_SERVER['REQUEST_METHOD']=='POST' && $TYPE=="REGISTRATION" && (!defined("ADMIN_SECTION") || ADMIN_SECTION!==true))

    if (COption::GetOptionString(«main», «new_user_registration», «N») == «Y» && $_SERVER[‘REQUEST_METHOD’] == ‘POST’ && $TYPE == «REGISTRATION» && (!defined(«ADMIN_SECTION») || ADMIN_SECTION !== true))

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

    if((!(defined("STATISTIC_ONLY") && STATISTIC_ONLY && substr($APPLICATION->GetCurPage(), 0, strlen(BX_ROOT."/admin/"))!=BX_ROOT."/admin/")) && COption::GetOptionString("main", "include_charset", "Y")=="Y" && strlen(LANG_CHARSET)>0)

    $publicStatisticOnly = False; if (defined(«STATISTIC_ONLY») && STATISTIC_ONLY && substr($APPLICATION->GetCurPage(), 0, strlen(BX_ROOT.«/admin/»)) != BX_ROOT.«/admin/») < $publicStatisticOnly = True; > if (!$publicStatisticOnly && strlen(LANG_CHARSET) > 0 && COption::GetOptionString(«main», «include_charset», «Y») == «Y»)

    if (!defined("STATISTIC_ONLY") || ! STATISTIC_ONLY || substr($APPLICATION->GetCurPage(), 0, strlen(BX_ROOT."/admin/")) == BX_ROOT."/admin/") < if (strlen(LANG_CHARSET) > 0 && COption::GetOptionString("main", "include_charset", "Y") == "Y") < >>

    Форматирование массивов

    Массивы, которые записываются в несколько строк, следует форматировать следующим образом:

    $arFilter = array( "key1" => "value1", "key2" => array( "key21" => "value21", "key22" => "value22", ) );

    Пустые строки

    Пустые строки помогают разбивать код приложения на логические сегменты. Несколькими строками могут отделяться секции в исходном файле. Одной пустой строкой отделяются друг от друга методы и логические секции внутри метода для более удобного чтения.

    Именование переменных

    • Не используйте подчеркивание для отделения слов внутри идентификаторов, это удлиняет идентификаторы и затрудняет чтение.
    • Старайтесь давать переменным, методам и пр. «говорящие» названия. Предпочтительно использовать имена, которые ясно и четко описывают предназначение и/или смысл сущности.
    • Старайтесь делать имена идентификаторов как можно короче (но не в ущерб читабельности).
    • Если в имени содержится аббревиатура, лучше вместо всех заглавных оставить только первую букву заглавной, а остальные написать строчными. Т.е. лучше задать имя getHtmlStatistic, а не getHTMLStatistic.
    • Первое логическое слово должно начинаться с маленькой буквы, остальные логические слова — с большой. Имена переменных могут иметь префиксы, если требуется явно указать тип переменной: ar — для массивов, db — для наборов данных из базы и т.п. Пример: $testCounter , $userPassword .
    • При именование функций и методов, каждое логическое слово должно начинаться с заглавной буквы (стиль Паскаль). Например: CountVariable, ChangeUserPassword.

    Комментарии

    Для пояснения назначения класса или метода необходимо размещать комментарий перед объявлением этого класса или метода. Следует добавлять комментарий о назначении классов и методов к каждому публичному классу или методу. Перед логическими секциями кода желательно добавлять комментарии о том, что данная секция будет делать. Комментарии должны быть только на английском языке.

    SQL запросы

    Каждая операция SELECT, FROM, WHERE, ORDER BY, GROUP BY, HAVING должна начинаться с новой строки. Правило переноса длинной строки такое же как в PHP — новая строка с табуляцией.

    Если у вас есть вопросы, пишите их в нашей группе — https://vk.com/progtime

    Вы так же можете разместить свой вопрос на нашем форуме, где другие программисты смогут вам помочь в решение вашей задачи — https://vk.com/prog_time

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

    Так же прокачивайте свои навыки на нашем канале — https://www.youtube.com/c/ProgTime

    Рекомендованные

    Вам также будет интересно

    На этом всё!
    Больше интересных статей в нашей группе — https://vk.com/progtime
    Вы так же можете разместить свой вопрос на нашем форуме, где другие программисты смогут вам помочь в решение вашей задачи — https://vk.com/prog_time
    Так же прокачивайте свои навыки на нашем канале — https://www.youtube.com/c/ProgTime

    • Написание материала для курса по разработке ботов на Telegram
    • Разработка универсального парсера на PHP

    Каждый переведённый донат, мотивирует на создание новых записей и уроков на YouTube

    Источник

    Как сделать перенос строки по пробелу?

    Нужно сделать перенос строк (записывать в массив)по пробелу по заданному размеру длины строки. Пример:

    $text = 'Возвращает TRUE в случае успешного завершения или FALSE в случае возникновения ошибки. Если вызвана статически, возвращает объект класса DOMDocument или FALSE в случае возникновения ошибки.'; class MyClass < public $output = array(); public function text($text, $string_length)< print_r($output); >> $obj = new MyClass(); $obj->text($text, 20); 
    Array ( [0] => Возвращает TRUE в [1] => случае успешного завершения [2] => или FALSE в случае возникновения [3] => ошибки. Если вызвана статически, [4] => возвращает объект класса DOMDocument [5] => или FALSE в случае возникновения ) 
    class MyClass < public $output = array(); public function text($text, $string_length)< $i = 0; foreach(explode(' ', $text) as $val)< if(!empty($this->output[$i]))< if(iconv_strlen($this->output[$i], 'utf-8') < $string_length)< $this->output[$i] .= $val.' '; > else < ++$i; if(isset($this->output[$i]))output[$i] .= $val.' ';> > > else < $this->output[$i] = $val.' '; > > print_r($this->output); > > $obj = new MyClass(); $obj->text($text, 20); 
    Array ( [0] => Возвращает TRUE в [1] => успешного завершения [2] => FALSE в случае возникновения [3] => Если вызвана статически, [4] => объект класса DOMDocument [5] => FALSE в случае возникновения ) 

    Пропадает начиная с array [1]. Т.е. должно быть: [0] => Возвращает TRUE в [1] => СЛУЧАЕ успешного А слово СЛУЧАЕ теряется и вместо него вставляется завершения Не претендую, что мой алгоритм лучший, но уже перепробовал несколько различных способов и этот вышел ближе всего к истине.

    Посмотрите вот это: ru.stackoverflow.com/questions/464557/… — с небольшими изменениями можно использовать

    Юрий, вы опубликовали много описаний меток, напрямую копируя содержимое из внешних источников. Так делать не нужно. Зайдите в чат: chat.stackexchange.com/rooms/22462/stack-overflow—

    2 ответа 2

    Довёл идеи автора до логического завершения.

      Вариант №1.
      Конвертация строки в однобайтовую кодировку CP1251.
      Корректный вызов функции wordwrap в CP1251.
      Конверсия в исходную кодировку.
      Распаковка готовой строки в массив.

    class MyClass < public $output = array(); public function text($text, $string_length)< $code_original = mb_detect_encoding($text); $text_cp1251 = mb_convert_encoding($text, "CP1251"); $wrap_cp1251 = wordwrap($text_cp1251, 20,"
    "); $wrap_original = mb_convert_encoding($wrap_cp1251, $code_original, "CP1251"); $this->output = explode("
    ", $wrap_original); print("
    "); print_r($this->output); print("

    "); > > $text = 'Возвращает TRUE в случае успешного завершения или FALSE в случае возникновения ошибки. Если вызвана статически, возвращает объект класса DOMDocument или FALSE в случае возникновения ошибки.'; $obj = new MyClass(); $obj->text($text, 20);

    class MyClass < public $output = array(); public function text($text, $string_length)< foreach(explode(' ', $text) as $val)< $len = iconv_strlen($val, 'utf-8')+1; if(empty($sum_prev))< $sum_prev = $len; $out_prev = $val; continue; >if(($sum_prev += $len) < $string_length+2)< $out_prev .= (' '.$val); >else < array_push($this->output, $out_prev); $sum_prev = $len; $out_prev = $val; > > array_push($this->output, $out_prev); print("
    "); print_r($this->output); print("

    "); > > $text = 'Возвращает TRUE в случае успешного завершения или FALSE в случае возникновения ошибки. Если вызвана статически, возвращает объект класса DOMDocument или FALSE в случае возникновения ошибки.'; $obj = new MyClass(); $obj->text($text, 20);

    Результаты совпали полностью:

    Array ( [0] => Возвращает TRUE в [1] => случае успешного [2] => завершения или FALSE [3] => в случае [4] => возникновения [5] => ошибки. Если вызвана [6] => статически, [7] => возвращает объект [8] => класса DOMDocument [9] => или FALSE в случае [10] => возникновения [11] => ошибки. )

    Источник

    Как сделать перенос строк в операторе echo? [дубликат]

    Как сделать перенос строк с помощью конструкции echo в php? \n — не работает, хоть и написан в мануале, работает только тег html
    . Работаю в Win7 64x, xampp.

    5 ответов 5

    Разметка HTML игнорирует переводы строк, за исключением предварительно форматированного текста.

    Для переноса строки используйте тэг:

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

    Это поведение можно изменить, как указано выше тэгом pre , либо свойством css white-space: pre .
    Подробная информация в справочнике: https://webref.ru/css/white-space

    Для конвертации переносов строк в видимые
    в php есть специальная функция:

    $text = "Line 1\nLine 2\n"; echo nl2br($text); // Line 1
    \nLine 2
    \n

    Для тех кто будет читать этот текст через годы. Дополню немного. Нужно различать перевод строки как команду браузера, и перевод строки для оформления исходного текста. Вот про отображение ответили отлично. А про оформление исходного может возникнуть проблемка мелкая. ‘\n’ отобразит в исходнике именно \n т.е. два символа, а «\n» переведёт строку и код страницы будет писаться с новой строки. Пожалуйста самый очевидный пример:

    Выведет в исходник в одну строчку все тэги. Что конечно работает, но коллега Вас проклянёт если будет смотреть код без вспомогательных средств. А вот:

    аккуратненько разделит список на строчки.

    Источник

    Читайте также:  Php echo with new lines
Оцените статью