Композиция объекта PHP — получить доступ к свойству класса владельца без передачи аргументов?

Я задал этот вопрос заранее, но я мог бы сформулировать его плохо. Я не получил ответ.

у меня есть Image класс, который всегда создает экземпляр Id класс, когда он конструирует. Каждое изображение всегда имеет Id, и когда Image разрушен, Id также уничтожен. Насколько я понимаю, это называется Object Composition.

Мой класс 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 может понадобиться объект создателя fileName а также fileSize генерировать хеш, или может понадобиться его validMimeTypes, который может быть константным массивом, описывающим этот класс.

Я не против узнать, есть ли у него лучшие альтернативы — на самом деле, мне любопытно — но прежде всего я хотел бы знать, как этого добиться, не передавая аргументы на этапе __construct ().

0

Решение

Во-первых, вы не должны использовать публичные атрибуты, потому что это нарушает инкапсуляцию.
Посмотрите на код ниже. Вы можете пройти $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 в атрибут класса.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]