我不明白如何在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的第二行中基于另一个内部设置变量? :)
答案 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