Php全局变量范围?

时间:2012-08-16 11:33:13

标签: php

更新

我下面的代码将由其他网页上的表单调用。这就是为什么我没有做一个obj的实例。

更详细的代码:

$serverloc='serverURL';

class Aclass{

           function push(){
             global $serverloc;
             echo $serverloc;
             funNotinClass();
           } 

           function otherFunction(){

              echo $serverloc;

           }
}

funNotinClass(){

      echo $serverloc;
}

有一个Class包含2个函数“push()”和“otherFunction()”,并且有独立的函数“funNotinClass()”和push()调用它。该类用于其他页面中的Web表单。当用户单击提交表单时,调用该类并使用push()函数。我发现一个奇怪的事情是全局var $ serverloc对push()和funNotinClass()是不可见的(它们不会打印出任何东西),但是otherFuction()就像一个函数就像在Aclass里面的puch()一样可以只使用$ serverloc(我甚至不在它前面添加全局)。有多奇怪......有谁知道造成这种情况的原因是什么?

+++++++++++++++++++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++

我读了很多关于php中全局变量范围的信息。 他们都说全局var是在函数或类之外定义的,你可以通过使用全局这个关键词来使用它。

所以这是我的代码

$serverloc='serverURL';

class Aclass{

function Afunction(){
 global $serverloc;
 echo $serverloc;

} 
}

但是当我运行这个类时,它没有打印出来。 是因为我做错了什么,或者全局变量就这样不起作用了。因为我之前阅读的所有示例都只是直接访问函数中的全局变量而不是类

中的函数

3 个答案:

答案 0 :(得分:3)

根据DaveRandom的评论 - 你实际上并没有制作一个Aclass对象的实例。

这可以按预期工作并显示数据:

<?php 
    $serverloc='serverURL';

    class Aclass{
        global $serverloc;      
        function Afunction()
        {
            echo  $serverloc;
        } 
    }

    $me = new Aclass();

    $me->Afunction(); // output: serverURL

?>

编辑:DaveRandom似乎发布了asnwers作为评论。去投票他的其他一些答案,代表属于他而不是我。我今晚是他的代笔作家。

答案 1 :(得分:1)

如果它是类全局变量,那么你就可以像

那样
class myClass
{    
  private $globVar = "myvariable";

  function myClass()
  {
    return $this->globVar;
  }
}

答案 2 :(得分:0)

  

但是当我运行这个类时,它没有打印出任何东西

执行意义上,您不会运行classes。类只是一个data structure,它包含相关的数据和函数(称为方法)。

作为大多数传统数据结构,您可以创建它们的实例(称为对象),然后对它们执行操作。对对象(类的实例)执行操作的一种方法是传递消息以使其执行某些操作:即调用方法。

所以,在你的情况下,你可以这样做:

$obj = new Aclass(); // create an object, instance of Aclass
$obj->Afunction();   // ask it to perform an action (call a method)

话虽如此,有时你想创建一个只用于分组相关函数的类,它实际上并不真正在一个对象中共享数据。他们通常可以通过全局变量共享数据(例如:$_SERVER$_GET等)。那可能就是你的设计。

这样的类可以在没有实例化它们的情况下执行它们的方法,如下所示:

Aclass::Afunction();

虽然依赖全局变量通常是快速设计的一个指标,但在某些情况下它确实是最好的权衡。我会说$serverlocation$baseurl很可能是其中一种情况。 :)

查看更多内容: