php变量不能在heredoc中工作

时间:2012-03-08 02:19:05

标签: php html heredoc

我在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发送到我的浏览器之前,它们正在被的值正确替换:

  • $ thisFilename
  • $ theLoggedInUser
  • $ ITEMNAME
  • $ theLinkID
  • $ itemEra

我怎么知道上面的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."

1 个答案:

答案 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
}