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 手册中有关类和对象的基础知识
- 关于静态关键字