2013-02-14 120 views
1

我经常需要将大字符串分配给变量。在源代码中,我最好希望将我的行保留在80个字符之内。防止PHP解释源代码中字符串中的新行

理想情况下,我希望能够在多行上放置这些文字字符串。

我想避免的是使用串联或函数调用(例如preg_replace())将多个字符串连接在一起。我不喜欢这种想法,为了改善我的代码风格,我必须调用语言功能。

的一些例子,我想:

$text = <<<TEXT 
Line 1 
Line 2 
Line 3 
TEXT; 
    echo($text); 

这应该输出:

Line1Line2Line3 

这可能吗?

+0

你真的无法避免周围的字符串连接工作这一个...一个多行字符串中的换行是一个换行符。 – Ocramius 2013-02-14 00:51:19

+0

我读过这3次,但它仍然没有任何意义。你想剥离换行符,以便浏览器源码看不到新行吗? – 2013-02-14 00:52:47

+0

@ Lawrence Cherone:OPs Coding Conventions否认他使用超过80个字符的代码行,所以他想分割他们 – zerkms 2013-02-14 00:53:46

回答

3

有几个选项:

  1. 正好连接(首选)

  2. 使用array构建

  3. 使用sprintf()

只是合作ncatenate:

echo 'long long line1' 
    . 'another long line 2' 
    . 'the last very long line 3'; 

什么效率?

上面的代码编译成以下的操作码(这是什么运行):

5 0 > CONCAT  ~0  'long+long+line1', 'another+long+line+2' 
    1  CONCAT  ~1 ~0, 'the+last+very+long+line+3' 
    2  ECHO  ~1 

正如你所看到的,它通过连接头两行建立字符串,然后是最后一行;丢弃最后的~0。在内存方面,差异可以忽略不计。

这是一个单echo声明会是什么样子:

3 0 > ECHO    'long+long+line1another+long+line+2the+last+very+long+line+3' 

从技术上讲它的速度更快,因为没有中间步骤,但在现实中,你会不会觉得什么不同。

使用array

echo join('', array(
    'line 1', 
    'line 2', 
    'line 3', 
)); 

使用sprintf()

echo sprintf('%s%s%s', 
    'line 1', 
    'line 2', 
    'line 3' 
); 
+0

没有理由更喜欢第一和第二第三)至少他们没有带来任何明显的好处 – zerkms 2013-02-14 00:54:24

+1

@zerkms谢谢,我已经使我的意见更清晰:) – 2013-02-14 00:57:32

+0

@zerkms什么是效率? – 2013-02-14 02:18:49

1
$text = 'Line1'. 
     'Line2'. 
     'Line3'; 

var_dump($text); 

这样你就可以将你的代码分成几行,但数据本身就是一行代码。

0

有很多方法来连接字符串,但问题是不是字符串的长度,也没有格式化的,你正在混合大量的标记与PHP。

IMO真的,如果您的应用程序的核心逻辑包含大量的html,那么您应该考虑将其移出逻辑并从外部文件加载它,这样可以提高代码的可读性。

./your_view.php

<h1>This is my view, I only want small amounts of PHP here, values will be passed to me</h1> 
<p><?php echo $somevar;?></p> 

现在你的核心逻辑中,你或许会拥有加载你的观点和将数据传递给它的全局函数。那么你可以控制删除新行。

的index.php(或逻辑文件)

<?php 
function load_view($path,$data,$minify=false) { 
    if (file_exists($path) === false){ 
     return false; 
    } 
    extract($data); 
    ob_start(); 
    require($path); 
    $out = ob_get_contents(); 
    ob_end_clean(); 
    //you can remove all the new lines here 
    if($minify===true){ 
     return preg_replace('/^\s+|\n|\r|\s+$/m', '', $out); 
    }else{ 
     return $out; 
    } 
} 

$data = array('somevar'=>'This is some data that I want to pass to a block of html'); 

echo load_view('./your_view.php',$data,true); 
?> 
+0

为什么你认为OP在web服务器下运行脚本,而不是在CLI中运行? HTML和模板如何与问题相关?你有一些OP想要遵循的长字符串。绝对不是答案。 – zerkms 2013-02-14 02:28:06

+0

PS:你的'$ minify'会破坏数据 - 你只是**不能**从上下文中删除新行。 HTML中的换行符是一个重要的特征 - 它可能会改变结果。 – zerkms 2013-02-14 02:31:39