0

我事先已经问过这个问题,但我可能措辞不佳。我没有得到答案。

我有一个类,它在构造时Image总是创建一个类的实例。Id每个 Image 总是有一个Id,当Image被销毁时,Id也被销毁。据我了解,这称为对象组合。

我的 Image 类(这里:$myImage)在初始化/构造期间创建了一个属性:$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访问其创建者的属性之一。如果结果不明显,我想知道访问类常量和对象属性之间是否存在差异。

例如,Id可能需要创建者对象的fileNameandfileSize来生成散列,或者它可能需要它的validMimeTypes,这可能是描述该类的 const 数组。

我不介意知道这是否有更好的选择——事实上,我很好奇——但首先我想知道如何在 __construct() 阶段不传递参数的情况下实现这一点。

4

1 回答 1

2

首先,您不应该使用公共属性,因为它会破坏封装。看看下面的代码。您可以传递$this给目标类,并能够访问其方法和属性:

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类的构造函数,将 Image 实例设置为类属性。

于 2018-01-10T20:25:03.877 回答