PHP 对象组合 - 访问所有者 class' 属性 而不传递参数?
PHP object composition - access owner class' property without passing down arguments?
我之前问过这个问题,但我可能措辞不当。我没有得到答案。
我有一个 Image
class,它在构造时总是创建一个 Id
class 的实例。每个 Image 总是有一个 Id
,当 Image
被销毁时,Id
也会被销毁。据我了解,这称为对象组合。
我的图像class(此处:$myImage),在intialization/construction期间,创建一个属性:$this->id = new Id();
我希望 $this->id 能够访问 $myImage 的 属性。简单例子:
class Image {
public $fileSize;
public $id;
const validMimeTypes = array('image/png', 'image/jpeg');
public function __construct($fileSize = 0.0) {
$this->fileSize = $fileSize;
$this->id = new Id();
}
}
class Id {
public function echoMe() {
echo $creatorInstance->fileSize;
echo creatorClass::validMimeTypes;
//This is what I'd like to know how to do
}
}
$myImage = new Image();
$myImage->id->echoMe();
我想知道 Id
如何访问其创建者的属性之一。
我想知道访问 class constants 和对象 properties 之间是否存在差异,如果结果不明显的话。
例如,Id
可能需要创建者对象的 fileName
和 fileSize
来生成散列,或者它可能需要它的 validMimeTypes
,这可能是一个 const描述 class.
的数组
我不介意知道这是否有更好的选择 - 事实上,我很好奇 - 但首先我想知道如何在 [=41= 期间不传递参数的情况下实现这一点]() 阶段。
首先,你不应该使用 public 属性,因为它会破坏封装。
看看下面的代码。您可以将 $this
传递给目标 class,并能够访问其方法和属性:
class A
{
public function __construct()
{
$this->b = new B($this);
}
public function func()
{
echo "hello, world!";
}
}
class B
{
private $a;
public function __construct(A $a)
{
$this->a = $a;
echo $a->func();
}
}
$a = new A;
会显示hello, world!
因此,在您的情况下,只需使用 $this->id = new Id($this);
并创建 Id
class 的构造函数,它将 Image 实例设置为 class 属性。
我之前问过这个问题,但我可能措辞不当。我没有得到答案。
我有一个 Image
class,它在构造时总是创建一个 Id
class 的实例。每个 Image 总是有一个 Id
,当 Image
被销毁时,Id
也会被销毁。据我了解,这称为对象组合。
我的图像class(此处:$myImage),在intialization/construction期间,创建一个属性:$this->id = new Id(); 我希望 $this->id 能够访问 $myImage 的 属性。简单例子:
class Image {
public $fileSize;
public $id;
const validMimeTypes = array('image/png', 'image/jpeg');
public function __construct($fileSize = 0.0) {
$this->fileSize = $fileSize;
$this->id = new Id();
}
}
class Id {
public function echoMe() {
echo $creatorInstance->fileSize;
echo creatorClass::validMimeTypes;
//This is what I'd like to know how to do
}
}
$myImage = new Image();
$myImage->id->echoMe();
我想知道 Id
如何访问其创建者的属性之一。
我想知道访问 class constants 和对象 properties 之间是否存在差异,如果结果不明显的话。
例如,Id
可能需要创建者对象的 fileName
和 fileSize
来生成散列,或者它可能需要它的 validMimeTypes
,这可能是一个 const描述 class.
我不介意知道这是否有更好的选择 - 事实上,我很好奇 - 但首先我想知道如何在 [=41= 期间不传递参数的情况下实现这一点]() 阶段。
首先,你不应该使用 public 属性,因为它会破坏封装。
看看下面的代码。您可以将 $this
传递给目标 class,并能够访问其方法和属性:
class A
{
public function __construct()
{
$this->b = new B($this);
}
public function func()
{
echo "hello, world!";
}
}
class B
{
private $a;
public function __construct(A $a)
{
$this->a = $a;
echo $a->func();
}
}
$a = new A;
会显示hello, world!
因此,在您的情况下,只需使用 $this->id = new Id($this);
并创建 Id
class 的构造函数,它将 Image 实例设置为 class 属性。