当我在 php 中包含 Class 的文件时,文件看不到任何变量 - 就像它们不存在一样
While I'm including files by Class in php, file doesn't see any variables - like they don't exists
我已经为“创建”小部件创建了class。您调用静态函数,传递变量并拥有您的甜蜜小部件。
现在它起作用了,因为我一直在使用在小部件文件中创建的变量。但是现在我尝试使用一些 "global" 变量,但它没有看到它。
"global" 我的意思是我定义的全局变量(不是 phps),比如 $dic,它是字典 class.
的 object
这是为什么?我真的不想在每个小部件中创建这些变量。
我认为这是因为我正在创建临时文件。 (我需要用实际标题替换 {{ title }}
所以我得到小部件代码,替换标题,用替换的标题创建新的 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 - return 小部件文件夹路径
Tools::TMPName - return 随机名称
我得到的:
<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>
感谢 Magnus Eriksson 的帮助,我发现我的问题是多么愚蠢。
我用 $title 替换了 {{ title }} 占位符,发现它工作正常。所以问题出在作用域上,我不得不告诉函数不要使用本地 $dic 变量,而是要 "look out" 用于 "global" $dic。
小部件代码:
public static function ShopPanelTitle($title)
{
global $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") ?>
所以我想我需要阅读一些关于 variable scope 的内容。
再次感谢Magnus Eriksson,很有帮助。
我已经为“创建”小部件创建了class。您调用静态函数,传递变量并拥有您的甜蜜小部件。
现在它起作用了,因为我一直在使用在小部件文件中创建的变量。但是现在我尝试使用一些 "global" 变量,但它没有看到它。
"global" 我的意思是我定义的全局变量(不是 phps),比如 $dic,它是字典 class.
的 object这是为什么?我真的不想在每个小部件中创建这些变量。
我认为这是因为我正在创建临时文件。 (我需要用实际标题替换 {{ title }}
所以我得到小部件代码,替换标题,用替换的标题创建新的 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 - return 小部件文件夹路径
Tools::TMPName - return 随机名称
我得到的:
<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>
感谢 Magnus Eriksson 的帮助,我发现我的问题是多么愚蠢。
我用 $title 替换了 {{ title }} 占位符,发现它工作正常。所以问题出在作用域上,我不得不告诉函数不要使用本地 $dic 变量,而是要 "look out" 用于 "global" $dic。
小部件代码:
public static function ShopPanelTitle($title)
{
global $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") ?>
所以我想我需要阅读一些关于 variable scope 的内容。
再次感谢Magnus Eriksson,很有帮助。