PHP在类/对象中使用全局变量

时间:2012-10-19 22:26:57

标签: php class variables object

  

可能重复:
  Workaround for basic syntax not being parsed

我不明白如何在php中使用对象内的变量。

例如在javascript中我会这样做,这样会很好。

var foo = 10,
    bar = {option: foo+5}
;

console.log(bar.option);

在php中我也这样做但是它失败了

$variable = 10;

class myObject {
    var $username = $variable + 5 ;
    var $zzz = $username + 5;

}

是否可以在对象中使用$this或仅在函数中使用?

最后,如何在myObject的第二行中基于另一个内部设置变量? :)

4 个答案:

答案 0 :(得分:6)

正确的方法是使用constructor - 一种在创建对象时运行的方法。

定义class properties时,只能使用常量值(例如1'xyz'array(),而不是需要在运行。

将变量传递给构造函数,不要使用全局变量。

class myObject {
    public $username;
    public $zzz;

    public function __construct($variable) {
        $this->username = $variable + 5 ;
        $this->zzz = $this->username + 5;
    }
}

$obj = new myObject(10);
echo $obj->username; //15

在PHP中,如果您不想编写OOP代码,则不需要使用类和对象。您可以简单地创建好的旧功能。但是如果你想使用它们,请尝试熟悉OOP概念。

答案 1 :(得分:2)

具体来说,您询问了如何在PHP中使用全局变量。为此,您可以在定义变量时使用global关键字:

$variable = 10;

class myObject {
    function foo () {
        global $variable;
        $username = $variable + 5 ;
        $zzz = $username + 5;
    }
}

但不要!这是个坏主意。它违反了对象封装的每一个原则来执行这样的操作,并且每次代码运行时都会杀死一只小狗。好吧,也许小狗是安全的,但它仍然不是一个好主意。

相反,您应该通过构造函数或通过访问器方法将值传递给对象。见下文:

// The following code is guaranteed not to kill any puppies
class myObject {

    private $_variable;
    private $_userName;
    private $_zzz;

    public function __construct($value) {
        $this->_variable = $value;
        $this->_userName = $this->_variable + 5;
        $this->_zzz = $this->_userName + 5;
    }

}

$variable = 10;
$obj = new myObject($variable);

答案 2 :(得分:0)

由于您在课堂外访问它变量,我相信这是您想要实现的目标

class myObject {
    public $username;
    public $zzz;
}

$variable = 10;
$obj = new myObject();
$obj->username = $variable + 5;
$obj->zzz = $obj->username + 5;

或者你可以

class MyObject {
    private $username;
    private $zzz;

    public function increment($variable) {
        $this->username = $variable + 5;
        $this->zzz = $this->username + 5;
    }
}

$variable = 10;
$obj = new MyObject();
$obj->increment($variable); // First Call
$obj->increment(5); // Canbe called multiple times 

答案 3 :(得分:0)

您可以在对象静态和非静态中使用少量类型的变量,但也可以使用公共,私有保护。我不会介绍太多细节,但这是一个例子:

class MyClass 
{
   public $test = 'non-static';
   public static $otherTest = 'static';
   private $privateTest = 'private';
   const CONSTANT_TEST = 'constant';

   public function someMethod() {
       echo $this->$test; // non-static
       echo self::$otherTest; // static
       echo static::$otherTest; // static
       echo $this->privateTest; // private
   }

   public static staticMethod() {
       echo $this->test; // error
       echo self::$otherTest; // static
       echo static::$otherTest; // static
   }
}

$obj = new MyClass;
echo $obj->test; // non-static
echo $obj::otherTest; // static
echo MyClass::otherTest; // static
echo $obj->privateTest; // error
echo $obj::CONSTANT_TEST; // constant
echo MyClass::CONSTANT_TEST; // constant