다른 클래스에서 클래스의 메서드와 속성을 사용하려면 해당 클래스를 생성자에서 인스턴스화하고 인스턴스 속성으로 설정합니다.다른 클래스가 생성자에서 다른 클래스를 시작했을 때 생성자에서 클래스 인스턴스화
<?php
class ClassA
{
private $classB;
private $classC;
public function __construct()
{
// Instantiate class B and C and set the instance properties
$this->classB = new ClassB();
$this->classC = new ClassC();
}
// Example
public function getTest()
{
if ($this->classB->isTest1()) {
return 'some value';
} elseif ($this->classC->isTest1()) {
return 'some other value';
} else {
return 'some other value';
}
}
}
$ClassA = new ClassA();
$test = $ClassA->getTest();
가 내가 생성자에서 클래스를 인스턴스화 할 몇 번이 있고, 다른 클래스는 생성자 너무 다른 클래스의 인스턴스를했습니다
<?php
class ClassA
{
private $classB;
public function __construct()
{
// Instantiate class B and set classB instance propert.
$this->classB = new ClassB();
}
}
class ClassB
{
private $classA;
public function __construct()
{
// Instantiate class A and set classA property so we can use class A methods and properties in this class.
$this->classA = new ClassA();
}
}
$ClassA = new ClassA();
$ClassB = new ClassB();
이 클래스 A 때문에 비록 실패 생성자에서 클래스 B를 인스턴스화하고, 클래스 B가 생성자에서 클래스 A를 인스턴스화합니다. 그리고 PHP 오류 메시지 '##### 바이트의 사용 가능한 메모리 크기가 고갈 될 때까지이 작업을 계속 수행합니다.'
이 문제를 해결하는 가장 좋은 방법은 무엇입니까? 어떤 도움을 주셔서 감사합니다.
대신 종속성 주입을 사용하십시오. –
이것은 나쁜 디자인처럼 보입니다. 문제를 일으킬 운명의 클래스 구조에 많은 의존성을 구축하고 있습니다. –
@ tereško에서 이미 언급했듯이 [dependency injection] (https://en.wikipedia.org/wiki/Dependency_injection)의 사용과는 별도로 핵심 문제 중 하나는 [주기적 종속성] (https : //en.wikipedia.org/wiki/Circular_dependency). 즉,'B'없이'A'를 인스턴스화 할 수 없다는 것을 의미합니다. 그러나'A'없이'B'를 인스턴스화 할 수 없으므로 어느 클래스도 결코 인스턴스화 할 수 없습니다. – Sherif