0

更新:

我在下面放置的代码将被其他网页上的表单调用。所以这就是为什么我没有创建一个 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 中全局变量范围的信息。他们都说全局变量是在函数或类之外定义的,您可以使用 global this 关键字来使用它。

所以这是我的代码

$serverloc='serverURL';

class Aclass{

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

} 
}

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

4

3 回答 3

3

根据 DaveRandom 的评论 - 您实际上并没有创建 Aclass 对象的实例。

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

<?php 
    $serverloc='serverURL';

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

    $me = new Aclass();

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

?>

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

于 2012-08-16T11:39:19.247 回答
1

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

class myClass
{    
  private $globVar = "myvariable";

  function myClass()
  {
    return $this->globVar;
  }
}
于 2012-08-16T11:41:42.473 回答
0

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

在执行它们的意义上,您不运行类。类只是一个数据结构,其中包含相关的数据和函数(称为方法)。

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

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

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

看更多:

于 2012-08-16T11:55:12.627 回答