Как отформатировать длинные строки в массивах - PullRequest
2 голосов
/ 23 марта 2010

Как мне отформатировать очень длинные строки в моем исходном коде?
Я соблюдаю правило, что строка кода не должна быть длиннее 80 символов.
(Другие правила - стандарт форматирования Zend Framework)

например.

protected $_messages = array(
    'key1' => 'very, very long string lorem ipsum dolor sit amet…',
    'key2' => 'this one it very long too, and exceeds 80 characters len…'
);

Ответы [ 7 ]

2 голосов
/ 23 марта 2010

Лично мне иногда нравятся длинные строки - если вы отключите перенос в своем редакторе, это сделает вещи более читабельными.Разрывы в «строке»."строка".«Строка»;формат просто грязный, имо.

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

1 голос
/ 18 ноября 2014

Начиная с PHP 5.4, это не проблема.У меня был код, который обычно обрабатывал более 5000 строк символов, передавая их как записи массива без проблем в 5.4.Однако при переходе обратно к 5.3 из-за смены сервера я столкнулся с препятствием, когда массив не мог быть определен со сверхдлинной строкой.

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

РЕДАКТИРОВАТЬ: В качестве дополнительного примечания наш администратор сервера обновил нас до 5,4 за мой (и мою команду) запрос, и это фактически исправило проблему удержания длинной строки в качестве элемента массива.

1 голос
/ 23 марта 2010

Если вы не можете сохранить значения в БД / файле (в соответствии с Адамом / Питером) и вам абсолютно необходимо сохранить ограничение в 80/120 символов в соответствии с рекомендациями Zend Framework, то вы можете придерживаться их даже в этом случае .

согласно: http://framework.zend.com/manual/en/coding-standard.coding-style.html

Конкатенация строк (один уровень дополнительного отступа)

$sql = "SELECT `id`, `name` FROM `people` "
    . "WHERE `name` = 'Susan' "
    . "ORDER BY `name` ASC ";

Ассоциативные массивы (один уровень дополнительного отступа)

$sampleArray = array(
    'firstKey'  => 'firstValue',
    'secondKey' => 'secondValue',
);

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

protected $_messages = array(
    'key1' => 'very, very long string '
        . 'lorem ipsum dolor sit amet…',
    'key2' => 'this one it very long too, '
        . 'and exceeds 80 characters len…'
);

Редактировать:
Вышеприведенное не работает (спасибо и извините, что взял), так как PHP, похоже, не допускает никакого кода / операторов в начальных значениях свойств класса.

Решение состоит в том, чтобы объединить и установить начальные значения в конструкторе класса:

<?php

class bar {
    protected $_messages = Array();

    public function __construct() {

        // manually initialize, or load from DB/XML/etc
        $this->_messages[] = "very, very long string "
            . "lorem ipsum dolor sit amet";

        $this->_messages[] = "this one it very long too, "
            . "and exceeds 80 characters len";

        var_dump( $this->_messages );
    }
}

$foo = new bar();

?>
0 голосов
/ 29 июля 2013

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

public $arr = array(
  <<<TEXT
Some very
long text
TEXT
,
'key2' => <<<TEXT
Some more very
long text
TEXT
);

Но выглядит плохо!

0 голосов
/ 25 марта 2010

если строка слишком длинная, вы всегда можете использовать $var = include('file.php'); и внутри этого файла <?php return "loooooong string";

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

// dont use
$_string = "this is a long " . $string . " which is generated by program code along with some parameters like: " . $parameter1 . " or " . $parameter2;
// dont use
$_string = "The apples are "($paramBool ? "" : $not) . " there. The amount of apples is " . ($paramInt > 3 ? $bigger : $smaller) . "than 3";
// you can use IMHO
$_string = "this is a long string which is generated by program code along with some parameters like: width or height";

Первое и второе не должны использоваться, потому что вы можете легко пропустить переменные или потеряться в скобках.С другой стороны, третий не имеет переменных, функций или какой-либо другой логики внутри, так что маловероятно, что вам когда-либо потребуется в это вписываться.И для этого вы можете использовать перенос строк IDE ... пока другие «динамические и интерактивные» строки поддерживаются ниже 80.

Но это только мое личное предпочтение, и ответ «де-юре» находится впост Мики.

0 голосов
/ 23 марта 2010

Что сказал Адам. Если вы действительно не хотите, чтобы в вашем коде были длинные строки, вы всегда можете иметь строки в виде плоского файла или базы данных и читать их во время инициализации.

0 голосов
/ 23 марта 2010

Нет смысла ограничивать ваши переменные определенной длиной только для удобства чтения кода. Какие у вас варианты? Разбить его на несколько переменных и объединить? Бессмысленная дополнительная работа (для вас и php)

...