PHP 全局变量范围


Php global variable range?

update:

我放在下面的代码将由其他网页上的表单调用。 所以这就是为什么我没有制作 OBJ 的实例。

更多详细代码:

$serverloc='serverURL';
class Aclass{
           function push(){
             global $serverloc;
             echo $serverloc;
             funNotinClass();
           } 
           function otherFunction(){
              echo $serverloc;
           }
}
funNotinClass(){
      echo $serverloc;
}

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

++

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

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

所以这是我的代码

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

但是当我运行这个类时,它没有打印出任何东西。那是因为我做错了什么还是全局 var 无法以这种方式工作。由于我之前阅读的所有示例都只是直接访问函数中的全局变量,而不是类中的函数

根据DaveRandom的评论 - 你实际上还没有创建一个Aclass对象的实例。

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

<?php 
    $serverloc='serverURL';
    class Aclass{
        global $serverloc;      
        function Afunction()
        {
            echo  $serverloc;
        } 
    }
    $me = new Aclass();
    $me->Afunction(); // output: serverURL
?>

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

如果是类全局变量,你可以这样做

class myClass
{    
  private $globVar = "myvariable";
  function myClass()
  {
    return $this->globVar;
  }
}

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

执行类的意义上,您不运行类。类只是一个数据结构,用于保存相关的数据和函数(称为方法)。

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

因此,在您的情况下,您可以执行以下操作:

$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很可能是这些情况之一。:)

查看更多:

  • PHP 手册中有关类和对象的基础知识
  • 关于静态关键字