PHP对象组合 - 访问所有者类'属性而不传递参数?

时间:2018-01-10 20:08:35

标签: php class oop object-composition

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

我有一个Image类,它在构造时总是创建一个Id类的实例。每个图像始终具有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可能需要创建者对象的fileNamefileSize来生成哈希,或者它可能需要其validMimeTypes,这可能是一个描述的const数组那个班。

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

1 个答案:

答案 0 :(得分: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实例设置为类属性。