[英]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.