我在3周前写了一个heredoc,它工作得很好,直到今天它使用了5个php变量 这是heredoc:
echo <<<itemDetails_HEREDOC
<img src="$sitePath/images/logo-landing2.png" />
<form action="$thisFilename" method="post" name="arti-form" id="arti-formId">
<label style="display: inline-block; width: 140px">OWNER NAME:</label><input type="text" style="width: 300px"
id="ownerId" name="ownerName" readonly="readonly" value="$theLoggedInUser" /><br />
<label style="display: inline-block; width: 140px">THE ITEM:</label><input type="text" style="width: 300px"
readonly="readonly" id="itemNameId" name="itemName" value="$itemName" /><br />
<label style="display: inline-block; width: 140px">LINK:</label><input type="text" style="width: 300px"
readonly="readonly" id="itemLinkId" name="link" value="$theLinkID" /><br />
<label style="display: inline-block; width: 140px">ERA:</label><input type="text" style="width: 70px"
readonly="readonly" id="itemEraId" name="itemEra" value="$itemEra" /><br />
itemDetails_HEREDOC;
上面的heredoc中有六(6)个php变量。第一个($ sitePath)不工作。我今天刚刚加了。
由于某种原因,服务器没有正确替换'$ sitePath'(我的heredoc中的第一个php变量),因为当浏览器收到上述页面时,会产生错误:
Notice: Undefined variable: sitePath in C:\xampp\htdocs\Arti-facks\showItem.php on line 221
以下是heredoc中的5个php变量,并且工作正常3周 - 在将html发送到我的浏览器之前,它们正在被的值正确替换:
我怎么知道上面的php变量在服务器上正确解析,其关联值被放入heredoc然后发送到浏览器?
简单 - 我做一个'查看页面源',而不是在服务器发送的html代码中看到'$ thisFilename'或'$ itemName'等 - 我在上面看到了它们的关联值heredoc html。
例如,页面来源显示heredoc中的“ $ thisFilename ”已正确解析为“ showItem.php 。”
我的'$ sitePath'在名为“ globals.php ”的全局包含文件中声明,在该文件中,$ sitePath声明如下:
$sitePath = "http://localhost/Arti-facks";
在showItem.php的顶部,在过去的3周里,我有这个包含语句来引入 globals.php :
require_once 'globals.php'; // variables and statics used throughout
所以今天我在globals.php
中添加了$ sitePath声明(上面)为了证明showItem.php能够“看到”我添加到globals.php的新声明的$ sitePath, 我回应变量 - 确定,showItem.php 100%能够'看到'我新申报的$ sitePath。
AND YET - 尽管如此 - 尽管使用上述heredoc并使用其五个其他php变量已有3周时间 - heredoc没有得到$ sitePath。
当我'查看页面源'时,这是我在上面的heredoc的$ sitePath行中看到的内容:
<img src="/images/logo-landing2.png" />
你可以在/images/logo-landing2.png之前看到$ sitePath部分 是BLANK或缺少。
为什么我,在3个无问题的星期,已经成功解决了五个问题 上面的heredoc中的PHP变量,但我今天添加了第6个php变量,就好像
"Goodness, your quota for PHP variables in your heredoc there was maxed out
at 5. And now we see you're trying to use a 6th php variable -- what were you thinking."
答案 0 :(得分:5)
由于在函数内部调用HEREDOC,因此全局变量$sitePath
不在范围内。在函数顶部,使用global
关键字:
function yourfunction() {
global $sitePath;
// Then build the HEREDOC
}
或者使用HEREDOC内的$GLOBALS
数组:
echo <<<itemDetails_HEREDOC
<img src="{$GLOBALS['sitePath']}/images/logo-landing2.png" />
<form action="$thisFilename" method="post" name="arti-form" id="arti-formId">
...snip...
itemDetails_HEREDOC;
或者优先选择任一选项,将$sitePath
变量传递给需要它作为参数的函数。
function yourfunction($sitePath) {
// now $sitePath is in scope without
// reaching into the global namespace
}