如何格式化数组中的长字符串

时间:2010-03-22 21:19:00

标签: php zend-framework code-formatting

如何在源代码中格式化很长的字符串?
我遵守规则,该行代码不应超过80个字符 (其他规则是Zend Framework格式化标准)

e.g。

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 个答案:

答案 0 :(得分:2)

就个人而言,我有时喜欢排长队 - 如果你在编辑器中关闭包装,它可以使事情更具可读性。 “字符串”中断。 “字符串”。 “串”;格式只是混乱的imo。

基本上,规则有待破解。使用最易读的东西,而不是符合别人的可读性。

答案 1 :(得分:1)

如果您无法将值存储在数据库/文件中(根据adam / Peter),并且您绝对需要按照Zend Framework准则保留80/120字符限制,那么即使在这种情况下您也可以遵守它们

按照: 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();

?>

答案 2 :(得分:1)

从PHP 5.4开始,这似乎不是问题。我有一些代码经常处理5000多个字符串,将它们作为数组条目传递给5.4,没有问题。但是,当由于服务器更改而迁移回5.3时,我遇到了一个路障,其中无法使用超长字符串定义数组。

我的问题有些不同,也许这很有帮助,也许不是。如果你的应用程序想要一个数组用于它的DB参数,并且一个对象只是不能删除它,那么你可以将你的字符串作为SQL语句的一部分包含在内,直到你可以进入5.4。

编辑:作为一个补充说明,我们的服务器管理员将我们(和我的团队的)请求升级到5.4,事实上,这确实纠正了将长字符串作为数组元素的问题。

答案 3 :(得分:0)

仅为了代码的可读性而将变量限制为一定长度是没有意义的。你有什么选择?将它拆分成几个变量并连接?毫无意义的额外工作(为你和php)

答案 4 :(得分:0)

亚当说的话。如果您真的不想在代码中使用长行,则可以始终将字符串放在平面文件或db中,并在初始时读取它们。

答案 5 :(得分:0)

如果字符串长度非常长,您可以随时使用$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以下。

但这只是我个人的偏好,“法律上”的回答是在MicE的帖子中。

答案 6 :(得分:0)

如果允许换行,您可以使用Nowdoc

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

但看起来很糟糕!