PHP-将值传递给嵌套对象-警告:从空值创建默认对象
我是PHP OOP新手,并且理解“警告:从空值创建默认对象”来自一个在编写之前没有初始化的对象,但我很难理解为什么下面的代码会出现错误 请帮忙PHP-将值传递给嵌套对象-警告:从空值创建默认对象,php,oop,Php,Oop,我是PHP OOP新手,并且理解“警告:从空值创建默认对象”来自一个在编写之前没有初始化的对象,但我很难理解为什么下面的代码会出现错误 请帮忙 class A { public $varA; } class B { public $varB; function __construct(){ $varB = new A; } } $obj = new B; $obj->varB->varA = "Whatever"; 创建对象实例时,应使用伪变量“$this”来处
class A { public $varA; }
class B {
public $varB;
function __construct(){ $varB = new A; }
}
$obj = new B;
$obj->varB->varA = "Whatever";
创建对象实例时,应使用伪变量“$this”来处理对象的属性 在您的代码中,第5行中的
$varB
并没有处理class属性,而是一个局部变量,它在函数完成后立即被销毁(因为它释放了对它的所有引用)。请在“”手册页中阅读有关此行为的更多信息
因此,您的代码应该如下所示:
class A { public $varA; }
class B {
public $varB;
function __construct(){ $this->varB = new A(); }
}
$obj = new B();
$obj->varB->varA = "Whatever";
var_dump($obj);
如果给类
A
A构造函数,会发生什么?另外,不能从类IIRC之外设置受保护的属性。你好,迈克。类A中的构造函数执行ok,但使用$varA=“test”;在这种情况下,构造函数是没有意义的,它会被遗忘。如果我使用$this->varA=“test”;正如下面Gergely所建议的那样,它工作得很好。。。如果我像你说的那样把受保护的财产改成“公共的”。应该已经注意到$varA的作用域仅限于构造函数,但有时您看不到寻找的木材。谢谢你的帮助。是的,我没有注意到丢失的$this
谢谢Gergely,现场。顺便说一下,miken32是正确的,A级的$varA需要公开。谢谢你们的帮助,伙计们。这一次让我咬断了手臂!没有必要。有时,您希望对其他类隐藏某些属性。要以协调的方式访问这些变量,可以使用getter/setter方法扩展类。但是,是的,让$obj->varB->varA=“随便什么”代码>工作,它需要公开。是的,我正在使用getter和setter。我的错误来自于试图将问题简化到这里——原始代码太难理解了。