为什么我在函数接管时得到未定义的属性Takeover :: user2? 我不确定我做错了什么。有人可以帮忙吗? 我可以在主文件上调用user2-> addsaldo()但我不能在另一个函数中调用它。为什么呢?
班级用户
class User {
/**
* @AttributeType int
*/
private $iduser;
/**
* @AttributeType float
*/
private $saldo=0;
/**
* @AssociationType Portefolio
* @AssociationKind Composition
*/
public $idportefolio;
public function __construct($iduser){
$this->iduser = $iduser;
}
/**
* @access public
*/
public function getid() {
// Not yet implemented
}
/**
* @access public
*/
public function addsaldo($saldo) {
$this->saldo = $saldo;
}
}
班级接管
class Takeover {
/**
* @AttributeType int
*/
private $idTakeover;
/**
* @AssociationType root
* @AssociationMultiplicity 1
*/
public $Root;
public $IdeasTakerover=array();
public function __construct($idTakeover){
$this->idTakeover = $idTakeover;
}
/**
* @access public
*/
public function GetIdCompraRoot() {
// Not yet implemented
}
public function AddIdeasTakeover($idTakeover, $idideia) {
$this->idTakeover = $idTakeover;
$this->idideia = $idideia;
array_push($this->IdeasTakerover,$idideia);
}
/**
* @access public
*/
public function Takeover() {
$this->user2->addsaldo(200); //USER2 DOES EXIST
}
}
创建用户并调用它们:
$takeover = new Takeover(1);
for ($i=0; $i<$conta; $i++ ){
$takeover->AddIdeasTakeover(1,$idsideias[$i]);
}
$takeover->Takeover();
if ($partial == "user") {
$booleanUser = TRUE;
$iduser=substr($buffer, 4);
${'user'.$iduser} = new User($iduser);
}
答案 0 :(得分:0)
这个问题不在这个课程中。问题是$GLOBALS['user2']
在此处引用时未定义:$GLOBALS['user'.$this->IdeiasTakeover[$i]]
。然后,在addsaldo()
中的未定义数组元素上调用$GLOBALS
。
另一方面,使用$GLOBALS
编写好的代码是不可能的。全局变量是坏消息。您不应该使用/引用全局变量。引用$ _POST,$ _GET等时异常处于低级别。即使如此,所有优秀的PHP框架都将这些包装在请求对象中。
修改强> 依赖注入是一个类使用另一个类的更好方法:
class X {
$yInstance;
public function __construct($yInstance)
{
$this->yInstance = $yInstance;
}
public function x()
{
//Call your 'y' method on an instance of Y
$this->yInstance->y();
}
}
class Y {
public function y()
{
echo 'Y::y() called!';
}
}
调用X :: x()
$y = new Y();
$x = new X($y);
$x->x();
输出:
Y::y() called!
最简单的方法是使用依赖注入容器。这是我最喜欢的PHP:http://symfony.com/doc/current/components/dependency_injection/introduction.html
另外,请查看Martin Fowlers关于IOC的经典文章: http://martinfowler.com/articles/injection.html
祝你好运!