我在PHP中是菜鸟,因为我主要使用.NET / Java。在代码库中,我正在工作,
class SomeOtherBaseClass{
public $prop2;
public function __construct(string $prop3)
{
$this->prop2 = $prop3;
}
public function __toString()
{
return $this->prop2 . ' '. $this->prop2;
}
}
class SomeClass
{
public function __toString()
{
return $this->prop1 . ' '. $this->prop1;
}
public $prop1;
public function someMethod() : SomeOtherBaseClass
{
return $this->createClass();
}
public function __construct()
{
$this->prop1 = 'foo';
}
private function createClass(
): SomeOtherBaseClass {
return new class(
$this->prop1
) extends SomeOtherBaseClass {
};
}
}
$class = new SomeClass();
echo $class;
echo $class->someMethod();
为什么我遇到找不到prop1的错误。显然,createClass
函数是具有SomeClass
的{{1}}的一部分。为什么我无法访问prop1
内部的prop1
?
答案 0 :(得分:1)
这是因为$prop1
没有价值或意义。
您可以添加__construct()函数来解决您的问题:
public function __construct()
{
$this->prop1 = 'foo';
}
现在当您调用此类时(例如$foo = new SomeClass();
):
$prop1
的值为foo
,可在您的函数中使用:
public function echoProp()
{
echo $this->prop1; # will output foo
}
注意:这仅是一个解释性的答案,而不是复制/粘贴的解决方案,但此处提供了所有原理供您在代码中使用。
让我知道这是否不是您想要的东西:)
编辑:
如果prop1
中存在SomeOtherClass
,则在构造时可以做到
public function __construct()
{
$this->class = new SomeClass();
$this->prop1 = $this->class->prop1;
}