可能重复:
To pass value of a variable in one function to another function in same class
使用PHP中的“GLOBAL”,可以在同一个类的另一个函数中使一个函数中的变量值可用。如果是这样,请建议如何使用Global实现这一目标。
答案 0 :(得分:5)
如果你在一个对象中,你不需要创建一个变量GLOBAL。
class myClass {
public $myVar = "Hello";
function myFunction() {
echo $this->$myVar;
}
}
这是对象的要点之一 - 您可以为变量分配不同的值,并在不同的方法中获取/设置这些变量。此外,您还可以创建多个对象实例,每个对象在同一结构中保存不同的信息,并使用相同的方法。
答案 1 :(得分:2)
除了@Codecraft所说的(关于使用公共属性),你可以使用:
以下是使用静态变量(私有)的示例,因为我认为这最符合您的需求:
class MyClass {
private static $_something;
public function write() {
static::$_something = 'ok';
}
public function read() {
return static::$_something;
}
}
$x = new MyClass();
$x->write();
var_dump($x->read());
输出:
string(2)“ok”
这实际上是类似于全局的内容,但只能从您的类中获取(因为关键字“私有”)和在班级的每个实例。如果使用设置某些非静态属性,它将在类的不同实例中更改(一个对象可能存储的值不同于另一个对象)。
基于静态和非静态变量的解决方案比较:
基于静态变量的解决方案将为您提供真正的类似全局的行为(在同一个类的不同实例中传递的值):
class MyClass {
private static $_something;
public function write() {
static::$_something = 'ok';
}
public function read() {
return static::$_something;
}
}
// first instance
$x = new MyClass();
$x->write();
// second instance
$y = new MyClass();
var_dump($y->read());
输出:
string(2)“ok”
基于非静态变量的解决方案如下所示:
class MyClass {
private $_something;
public function write() {
$this->_something = 'ok';
}
public function read() {
return $this->_something;
}
}
// first instance
$x = new MyClass();
$x->write();
// second instance
$y = new MyClass();
var_dump($y->read());
但会输出:
NULL
这意味着在这种情况下,第二个实例没有为您希望表现为“全局”的变量分配值。
答案 2 :(得分:0)
是的,一个函数中的变量值可以使用“GLOBAL”在同一个类的另一个函数中可用。以下代码打印3
:
class Foo
{
public function f1($arg) {
GLOBAL $x;
$x = $arg;
}
public function f2() {
GLOBAL $x;
return $x;
}
}
$foo = new Foo;
$foo->f1(3);
echo $foo->f2();
然而,全局变量的使用通常表明设计不佳。
请注意,虽然PHP中的关键字不区分大小写,但可以自定义使用小写字母。还不是包含所有全局变量的超全局数组被称为$GLOBALS
,而不是GLOBAL
。