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