有没有一种方法可以定义一个全局变量,它可以从类方法访问?
问题描述:
这里的情况是 我创建一个类的实例有没有一种方法可以定义一个全局变量,它可以从类方法访问?
$newobj = new classname1;
那么下面我有另一个类writtern,我想这个类来访问上述
class newclass {
public function test() {
echo $newobj->display();
}
}
不允许对象,有没有一种方法通过一个类来定义全局变量?
答
制作实例全球:
$newobj = new classname1;
class newclass {
public function test() {
global $newobj;
echo $newobj->display();
}
}
因为我得到了第一线downvote,我删除它。
+4
不需要第一个全局。全局关键字只能在函数中使用 – knittl 2010-05-14 07:23:15
答
这是允许的,但你需要使用适当的语法:要么global
关键字或$GLOBALS
超全局:
http://es.php.net/manual/en/language.variables.scope.php
http://es.php.net/manual/en/reserved.variables.globals.php
<?php
class classname1{
private $id;
public function __construct($id){
$this->id = $id;
}
public function display(){
echo "Displaying " . $this->id . "...\n";
}
}
$newobj = new classname1(1);
class newclass {
public function test() {
global $newobj;
echo $newobj->display();
}
public function test_alt() {
echo $GLOBALS['newobj']->display();
}
}
$foo = new newclass;
$foo->test();
$foo->test_alt();
?>
但是,必须谨慎使用全局变量。他们可能会导致难以理解和维护的代码以及难以追查的错误。它通常容易只是传递所需的参数:
<?php
class classname1{
private $id;
public function __construct($id){
$this->id = $id;
}
public function display(){
echo "Displaying " . $this->id . "...\n";
}
}
$newobj = new classname1(1);
class newclass {
public function test(classname1 $newobj) {
echo $newobj->display();
}
}
$foo = new newclass;
$foo->test($newobj);
?>
最后但并非最不重要的,你可能会寻找单身OOP模式:
答
您还可以从classname1继承你的NewClass和那么你将能够调用类'classname1'的方法 这样的:
class newclass extends classname1 {
public function test() {
echo parent::display();
}
}
听起来不是一个好主意我 – 2010-05-14 07:21:22
它并不总是一个坏主意,让$ newobj是一个数据库类的实例,那么它是非常有用的 – Harmen 2010-05-14 07:26:59
在我的情况下它 – Starx 2010-05-14 07:29:46