【问题标题】:How to use variables from one PHP file in another file's function?如何在另一个文件的函数中使用来自一个 PHP 文件的变量?
【发布时间】:2023-04-09 21:49:02
【问题描述】:

注意:到目前为止,我已经阅读了大约 25 个与此相关的问题,但从未直接回答如何正确使用这些变量的问题。如果这听起来像重复,我深表歉意。

我正在重写一个平面电子商务网站(所有手工制作的.htm 文件!),以便使用 PHP 脚本生成一些页面。这一切只是为了让我现在的生活更轻松。我一再告诉我的老板,这个网站需要从轨道上被摧毁,并且有一个完整的 CMS 正在筹备中。与此同时,该网站需要进行改造。有问题的网站:http://www.leather.com

我一直在使用 constructor_page.php 来声明和初始化一些变量,例如 $itemName$imagePath,这些变量在 include() 的内容页面中使用(修剪后的示例如下):

<?php
$imagePath = 'http://leather.com/images/harley_leather_boots/d81024_ladies_harley_leather_boots_360.jpg';
$itemName = 'Faded Glory Harley Boots';
include 'library/content.php'; //this in turn includes more files like the nav bar
?>

这样我只需将constructor_page.php 保存为有问题的项目页面,修改一些变量,然后include() 语句负责其余的工作。这部分工作正常。

我的问题是从同一目录中的文件自动生成“部门”页面。我希望 index.php 在循环中抓取这些相同的变量:

<?php
foreach (glob("*.php") as $filename) {
include $filename;
echo '<div class="related">';
echo '<a href="';
echo $filename; 
echo '">';
echo '<img src="';
echo $imagePath;
echo '" alt="';
echo $imageAlternateText;
echo '" class="frame-related align-left-related"';
echo '></a>';
echo '<a href="';
echo $filename; 
echo '">';
echo $itemName; 
echo '</a>';
echo '</div>';
}
?>

这是为了,对于每个 php 文件(是的,我知道它会递归到自身),获取相关变量并在向左浮动的 a 内创建一个漂亮的图片/链接,本质上是根据自动生成部门页面缩略图在它在那里找到的任何 php 文件上。

是的,这太可怕了。是的,这很骇人听闻。不用说,由于变量的范围,它不起作用。我愿意在这里提出建议,因为我只需要部门页面根据它在 SOME HOW 文件夹中找到的内容生成小图片和链接。提前致谢!

【问题讨论】:

  • global $variable = 'value' ?
  • 忘记人们对全局语句的看法。 page1.php 中定义的任何变量都将自动位于全局范围内,并可用于 page1.php 包含的任何脚本。你一定是做错了什么。
  • 如果您向我们展示了输出和您遇到的错误,将会有所帮助。

标签: php


【解决方案1】:

你一定有其他问题。让我演示一下:

<?php // This is index.php
$foo = 'bar';
include('page2.php');
?>


<?php // This is page2.php
include('page3.php');
?>

<?php // This is page3.php
echo $foo;
?>

如果你去index.php,它会显示“栏”。包含的 PHP 脚本继承了包含它们的范围。任何时候都不需要使用“全局”语句。但是,如果您的 page3.php 脚本如下所示:

<?php // This is page3.php
function display() {
    echo $foo;
}
display();
?>

这不会显示任何东西,因为现在 $foo 在 display() 函数的范围内,所以它需要像这样重写:

<?php // This is page3.php
function display() {
    global $foo;
    echo $foo;
}
display();
?>

因此,如果您的变量在其他脚本中不可用,那么您一定是做错了什么。

【讨论】:

    【解决方案2】:

    简单声明

    global $imagePath;
    

    (对于您想在多个脚本或函数中使用的其他变量也是如此。)

    【讨论】:

    • 我试过这个,但在一些调试语句中,即。 echo $imagePath; 它仍然为空。不幸的是,这是一个托管主机,所以我无法编辑 php.ini 或类似的东西。
    • 哦,为了让这一切更令人兴奋,它是一个 IIS 6 服务器。
    【解决方案3】:

    就像 VoteyDIsciple 所说,您必须首先在页面顶部将其声明为全局变量,如下所示:

    global $imagePath;
    
    $imagePath = 'path/to/the/image.jpg';
    

    然后在任何你想使用全局变量的页面上,你必须在使用它之前首先将它引用为全局变量。

    所以在你使用的页面上 echo $imagePath;您必须先再次执行此操作。

    global $imagePath;
    

    全局变量变得非常危险,所以我会尝试研究一种更 MVC 类型的框架,您在控制器中创建的变量会被传递到您的视图文件中。 http://en.wikipedia.org/wiki/Model%E2%80%93View%E2%80%93Controller

    我喜欢在其中开发的一个好的 MVC 框架是 Codeigniter http://codeigniter.com

    【讨论】:

    • 是的,我肯定知道全局变量的问题,这就是我试图避免它们的原因。我很想使用任何 PHP 框架。不幸的是,我是一个人,我的同事都不知道一点 PHP。基本上,我正在尝试编写一些足够简单的东西,让非 PHP 用户可以修改以制作内容,同时仍然主要是“PHP 魔法”
    • 你解释一下为什么答案是错误的。它解释了如何在每个页面中使用该变量。
    猜你喜欢
    • 2011-08-01
    • 1970-01-01
    • 2021-03-28
    • 1970-01-01
    • 2017-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多