繁体   English   中英

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

[英]How to format long strings in arrays

如何在源代码中格式化很长的字符串?
我遵守规则,该行代码不能超过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…'
);

我个人有时喜欢排长队-如果关闭编辑器中的换行功能,则可以使内容更具可读性。 “字符串”中的换行符。 “字符串”。 “串”; 格式只是凌乱的imo。

规则本质上是违反的。 使用对您来说最具可读性的内容,而不要遵循别人的可读性观念。

如果您不能将值存储在数据库/文件中(按照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();

?>

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

我的问题有所不同,也许这很有帮助,也许没有帮助。 如果您的应用程序想要一个数组作为其DB参数,而一个对象只是不会剪切它,那么您可以将字符串作为SQL语句的一部分包含在内,直到可以使用5.4。

编辑:作为补充,我们的服务器管理员根据我(和我的团队)的请求将我们升级到5.4,实际上,它确实纠正了将长字符串作为数组元素保存的问题。

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

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

但是看起来很糟糕!

仅出于代码的可读性而将变量限制为一定长度是没有意义的。 您有什么选择? 将其拆分为几个变量并进行连接? 没有意义的额外工作(适用于您和PHP)

亚当说了什么。 如果您确实不想在代码中使用长行,则始终可以将字符串保存在平面文件或db中,并在初始化时读取它们。

如果字符串是reeeeeeealy长,则可以始终使用$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的帖子中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM