如何在源代码中格式化很长的字符串?
我遵守规则,该行代码不应超过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…'
);
答案 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
);
但看起来很糟糕!