【问题标题】:Can't use value on the outside from inside a function with PHP [duplicate]无法使用 PHP 从函数内部使用外部值 [重复]
【发布时间】:2013-05-23 01:22:49
【问题描述】:

我在location.php 中有一个函数,代码如下:

    $isp = $ipInfo["isp"];
    $country = $ipInfo["country"];
    $state = $ipInfo["state"];
    $town = $ipInfo["town"];

    echo  "ISP: " . $isp . "<br>\n";
    echo  "Country: " . $country . "<br>\n";
    echo  "State: " . $state . "<br>\n";
    echo  "Town: " . $town . "<br>\n";

我有一个名为test.php 的文件。如果我使用此代码:

<?php
include('location');
    echo  "ISP: " . $isp . "<br>\n";
    echo  "Country: " . $country . "<br>\n";
    echo  "State: " . $state . "<br>\n";
    echo  "Town: " . $town . "<br>\n";
?>

test.php 内,我得到以下输出:

ISP: dslb-094-219-040-096.pools.arcor-ip.net
Country: DE - Germany
State: Saarland
Town: Schiffweiler
ISP: 
Country: 
State: 
Town: 

第二个 ISP、国家、州和城镇位于 test.php 中,不显示任何内容,第一个位于 location.php 中。整个问题是,我不能在外部或另一个 php 文件中使用在函数内部创建的变量。如何在外部使用变量? 它与全局和范围有关吗?

抱歉,如果我感到困惑,但现在快凌晨 3:30,我快疯了

【问题讨论】:

    标签: php function scope global


    【解决方案1】:

    您可以使用 global 关键字来执行此操作

    function my_func()
    {
        global $isp,$country,$state,$town;
        //do stuff to variables
    }
    echo $isp.$country.$state.$town;
    

    类似的东西会起作用。虽然更好的选择可能是在 return 语句中返回变量。

    --编辑--

    刚刚做了一个工作模型

    p1.php

    <?php
    function a()
    {
        global $b,$c,$d;
        $b='hi';
        $c='bye';
        $d='what';
    }
    a();
    ?>
    

    p2.php

    <?php
    include 'p1.php';
    echo $b.$c.$d;
    ?>
    

    应该没有任何理由对你不起作用。

    【讨论】:

    • 我在发帖前做了这个。它没有工作
    • @F4LLCON 使用经过测试且可以运行的脚本编辑了我的帖子。您确定在尝试访问变量之前执行了该函数吗?
    • 是的,我现在已经测试了你的代码,它可以工作了!我会去清理我的代码
    【解决方案2】:

    您不应该尝试在include 语句上提升变量,这会导致代码混乱。 include 不像函数调用。

    通常,您想要include 的文件类型是其中仅包含函数或类定义的文件。然后你可能会想使用include_once

    include 对于模板之类的东西很有用,您实际上可能最终会重复相同的文件,但只是针对 PHP 代码:不。

    正确的方法如下所示:

    // location.php
    function printIPInfo($ipInfo) { // THIS is a function
        $isp = $ipInfo["isp"];
        $country = $ipInfo["country"];
        $state = $ipInfo["state"];
        $town = $ipInfo["town"];
    
        echo  "ISP: " . $isp . "<br>\n";
        echo  "Country: " . $country . "<br>\n";
        echo  "State: " . $state . "<br>\n";
        echo  "Town: " . $town . "<br>\n";
    }
    
    // test.php
    include_once('location.php');
    printIPInfo($ipInfo);
    

    【讨论】:

      【解决方案3】:

      我不完全确定您遇到问题的原因

      我经常有一个“Dim.php”文件来定义常量字符串,然后包含使用:

      include("location.php");
      

      使用 .php 扩展名可以解决您的问题吗?

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-02-18
        • 2012-07-14
        • 2010-12-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-01-18
        • 2016-01-13
        相关资源
        最近更新 更多