虽然我在php中按类包含文件,但文件看不到任何变量-就像它们不存在一样

问题描述 投票:0回答:1

我已经为“ 正在创建”小部件创建了类。您可以调用静态函数,传递变量并拥有漂亮的小部件。

目前之所以有效,是因为我一直在使用在小部件文件中创建的变量。但是现在我尝试使用一些“全局”变量,但没有看到它。

通过“全局”,我的意思是我定义的全局变量(不是php),例如$ dic,它是字典类的对象。

为什么?我真的不想在每个小部件中创建这些变量。

我认为是因为我正在创建临时文件。 (我需要将{{ title }}替换为实际标题,以便获取小部件代码,替换标题,使用替换的ripple创建新的tmp文件,并将其包括在内,然后删除)

全局变量:

$dic = new Dictionary(isset($_COOKIE["language"]) ? htmlspecialchars($_COOKIE["language"]) : _LANG); // THE GLOBAL VARIABLE

小部件代码:

<span>{{ title }}</span>
<form action="<?php echo Path::GetCurrentURL(); ?>" method="post">
  <?php // for some reason it doesn't see any global variables so you have to create then once more in widgets which drives me nuts ugh?>
   <input type="submit" name="logoutAdm" value="<?php $dic->Translate("Log out"); ?>">
</form>

包含功能:

{
      $path = Path::Widgets("ShopPanelTitle.php");
      if (file_exists($path)) {
        $widget = file_get_contents($path);
        $widget = str_replace("{{ title }}", $title, $widget);
        $pathTmp = Tools::TMPName(".php",Path::TMP(""));
        echo $pathTmp;
        $file = fopen($pathTmp, "w+");
        fwrite($file,$widget);
        fclose($file);
        // for some reason it doesn't see any global variables so you have to create then once more in widgets
        include $pathTmp;
        unlink($pathTmp);
      }
}

我如何调用该函数:

<?php Widgets::ShopPanelTitle($dic->Translate("Main",true)) ?>

没有更多相关的代码。如果您想查看所有使用的代码,该问题将花费很长时间,并且会因泄露公司机密而被起诉:/。

Path :: Widgets-返回小部件文件夹的路径

Tools :: TMPName-返回随机名称

我得到的是:

<span>Title</span>
<form action="currentPage.php" method="post">
</form>

我想要得到的:

<span>Title</span>
<form action="currentPage.php" method="post">
   <input type="submit" name="logoutAdm" value="Log out">
</form>
php class include tmp
1个回答
0
投票

[Magnus Eriksson的帮助,我发现我的问题有多愚蠢。

我用$ title替换了{{title}}占位符,并注意到它可以正常工作。因此,我将$ dic作为标题传递,并且包含的​​文件开始注意到此变量。

小部件代码:

public static function ShopPanelTitle($title, $dic)
    {
      $path = Path::Widgets("ShopPanelTitle.php");
      if (file_exists($path)) {
        $title = $dic->Translate($title,true);
        include $path;
      } else {
        Tools::JSLog("Widget file " . $path . " doesn't exist.");
      }
    }

小部件:

<span><?= $title ?></span>
<form action="<?php echo Path::GetCurrentURL(); ?>" method="post">
    <input type="submit" name="logoutAdm" value="<?= $dic->Translate("Log out"); ?>">
</form>

小部件调用:

<?php Widgets::ShopPanelTitle("Main",$dic) ?>

所以我想我要读关于variable scope的话题。

再次感谢Magnus Eriksson,非常有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.