[英]OOP PHP - correct way to use a parent obj instance from children and other classes
我有以下代码:
class MyObj {
private $var1;
private $var2;
private $var3;
function __construct() {
$this->var1 = FALSE;
$this->var2 = FALSE;
$this->var3 = 0;
}
function getVar1() {
return $this->var1;
}
function getVar2() {
return $this->var2;
}
function getVar3() {
return $this->var3;
}
function setVar1($var1) {
$this->var1 = $var1;
}
function setVar2($var2) {
$this->var2 = $var2;
}
function setVar3($var3) {
$this->var3 = $var3;
}
}
class AA {
// ...
}
class A extends AA {
public $myobj;
public function __construct() {
$this->myobj = new MyObj();
}
public function getMyObj() {
return $this->myobj;
}
}
class B extends A {
public function __construct() {
parent::__construct();
$this->fun1();
}
private function fun1() {
$this->myobj->setVar1(TRUE);
}
}
class C extends A {
public function __construct() {
parent::__construct();
$this->fun2();
}
private function fun2() {
$this->myobj->setVar2(TRUE);
}
}
class OtherClass extends AA {
public function __construct() {
$B = new B();
$C = new C();
$C->getMyObj()->setVar3(5);
var_dump ( $C->getMyObj()->getVar1() ); // false
var_dump ( $C->getMyObj()->getVar2() ); // true
var_dump ( $C->getMyObj()->getVar3() ); // 5
echo "<br/><br/>";
var_dump ( $B->getMyObj()->getVar1() ); // NULL
var_dump ( $B->getMyObj()->getVar2() ); // false
var_dump ( $B->getMyObj()->getVar3() ); // 0
}
}
new OtherClass();
问题是我需要一种从OtherClass
访问$this->myobj
var的OtherClass
,以便从所有set()
函数获取所有更新。 因此,我希望在OtherClass
构造函数中得到以下结果:
var_dump ( $C->getMyObj()->getVar1() ); // true
var_dump ( $C->getMyObj()->getVar2() ); // true
var_dump ( $C->getMyObj()->getVar3() ); // 5
我也不知道将MyObj
类与$C->getMyObj()
一起使用是否是一种跟踪来自各种类实例( B
, C
, OtherClass
)的更新的好方法。 如果没有,我接受任何提示。
谢谢
刚刚使用singleton pattern
解决了问题。
问题是,调用parent::__construct();
从B
和C
,总是会创建$this->myobj
的新实例( $this->myobj = new MyObj();
),因此我失去了$this->myobj = new MyObj();
编辑。
我这样编辑代码:
class MyObj {
private static $instance;
private $var1;
private $var2;
private $var3;
function __construct() {
$this->var1 = FALSE;
$this->var2 = FALSE;
$this->var3 = 0;
}
function getVar1() {
return $this->var1;
}
function getVar2() {
return $this->var2;
}
function getVar3() {
return $this->var3;
}
function setVar1($var1) {
$this->var1 = $var1;
}
function setVar2($var2) {
$this->var2 = $var2;
}
function setVar3($var3) {
$this->var3 = $var3;
}
public static function getInstance(){
if( !isset( self::$instance ) ){
self::$instance = new MyObj();
}
return self::$instance;
}
}
class AA {
}
class A extends AA {
public function __construct() {
}
}
class B extends A {
public function __construct() {
parent::__construct();
$this->fun1();
}
private function fun1() {
$myobj = MyObj::getInstance();
$myobj->setVar1(TRUE);
}
}
class C extends A {
public function __construct() {
parent::__construct();
$this->fun2();
}
private function fun2() {
$myobj = MyObj::getInstance();
$myobj->setVar2(TRUE);
}
}
class OtherClass extends AA {
public function __construct() {
$myobj = MyObj::getInstance();
$B = new B();
$C = new C();
$myobj->setVar3(5);
var_dump ( $myobj->getVar1() ); // true
var_dump ( $myobj->getVar2() ); // true
var_dump ( $myobj->getVar3() ); // 5
}
}
new OtherClass();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.