我正在从用户手册学习php。现在我正在查看以下代码:
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Untitled Document</title>
</head>
<body>
<?php
$str = <<<EOD
Example of string
spanning multiple lines
using heredoc syntax.
EOD;
/* More complex example, with variables. */
class foo
{
var $foo;
var $bar;
function foo()
{
$this->foo = 'Foo';
$this->bar = array('Bar1', 'Bar2', 'Bar3');
}
}
$foo = new foo();
$name = 'MyName';
echo <<<EOT
My name is "$name". I am printing some $foo->foo.
Now, I am printing some {$foo->bar[1]}.
This should print a capital 'A': \x41
EOT;
?>
</body>
</html>
此代码按预期运行并输出:我的名字是&#34; MyName&#34;。我正在打印一些Foo。现在,我正在打印一些Bar2。这应该打印一个大写&#39; A&#39;:A
当我尝试缩进php以使其位于body标签前面时,其下方的HTML会被注释掉chrome broswer显示错误:
解析错误:语法错误,第39行的C:\ xampp \ htdocs \ xampp \ phpnotes \ index.php中的文件意外结束
答案 0 :(得分:4)
一般来说,没有。缩进PHP代码根本不会影响它。但是,对于heredoc这个规则有一个例外。 From the docs:
警告强>
注意具有结束标识符的行非常重要 必须不包含其他字符,分号(;)除外。这意味着 特别是标识符可能没有缩进,也可能没有 分号前后的任何空格或制表符。它也是 重要的是要意识到结束前的第一个角色 identifier必须是本地操作系统定义的换行符。 这是在UNIX系统上的\ n,包括Mac OS X.结束分隔符 还必须跟一个换行符。
如果此规则被破坏且结束标识符不是&#34;清理&#34;,则它 不会被视为结束标识符,PHP将继续 寻找一个。如果之前未找到正确的结算标识符 当前文件的结尾,最后会产生一个解析错误 线。
简而言之,您的EOD;
和EOT;
行必须独立,没有标签,空格或其他任何内容。
答案 1 :(得分:0)
rjdown's answer是正确的
您可能需要考虑的是尽量减少PHP和HTML的混合。通常,这是通过一种称为“模板”的方法完成的,其中您有两个单独的文件 - 一个几乎完全是HTML,偶尔使用PHP语句来回显函数或变量值返回的字符串。另一个文件是纯PHP,用于生成将显示的值。通常,模板文件使用.phtml
扩展名,后备脚本使用.php
。
这是一个Hello World示例:
这是“viewmodel”,viewmodel.php
<?php
class ViewModel {
public function sayHello($name = null) {
if (is_null($name))
{
$name = 'World';
}
return sprintf('Hello %s', $name);
}
}
这是“视图”,view.phtml
<?php
require_once('viewmodel.php');
$model = new ViewModel();
?>
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Untitled Document</title>
</head>
<body>
<?php echo $model->sayHello(); ?>
</body>
</html>
从那里你可以在浏览器中加载view.phtml
以获得输出。
这种方法并不是PHP独有的,在几乎任何系统和大多数边界使用模板是很常见的,其中一种语言的输出必须用另一种语言格式化。