홈>
부모 객체 데이터를 얻기 위해 객체를 순회하는 방법이 있습니까? "부모 개체"를 사용하면 부모 클래스를 의미하는 것이 아니라 말 그대로 개체를 의미합니다. 다음은 자바 세계의 예입니다 :-) :
$parent->test = "hello world!";
$parent->child = new B();
자식 개체에서 부모의 모든 데이터에 액세스 할 수 있다면 좋을 것입니다 :
class B{
//I know this doesn't exists, but it's what I wanted do do
function B(){
$this->parent = $this->parent();
echo $this->parent->test; //it would ouput "hello world"
}
}
현재 나의 해결책은 부모 객체를 자식에게 참조로 전달하거나 부모를 전역으로 만드는 것입니다. 더 나은 해결책이 있습니까?
감사합니다!
- 답변 # 1
- 답변 # 2
부모를 자녀에게 전달하는 것이 더 나은 해결책입니다. 다소 바람직하지 않은 공생 관계이지만.
B ()가 속성 인 객체에 대해 알고 있어야 하는가? 아마도 그렇지 않을 것입니다. 컴포지션을 통해 느슨하게 관련됩니다.
B ()가 왜 부모의 속성이어야합니까? B () 에서이 구현이 필요합니까, 아니면 부모의 일부 여야합니까?
- 답변 # 3
어떤 경우에는 유용 할 수 있습니다 : 생성자에서 부모 객체를 ChildClass에 매우 일찍 가져 오지 않습니다 한 단계 후에. 존재하지 않는 방법을 가로 챌 수 있습니다.
global
$parent->child = new B();
를 출력합니다 - 답변 # 4
PHP에는 그런 것이 없습니다.
부모 객체를 자식에게 전달하는 솔루션이 최선의 해결책이라고 생각합니다. 여러 부모가 같은 자녀를 갖지 못하게하려면 자녀의 생성자에서만 부모 속성을 설정해야합니다.
- 답변 # 5
아니요
$this를 사용하여 수퍼 클래스에서 변수에 액세스 할 수 있습니다 :
class ParentClass { const CHILD_PROPERTY_NAME = 'child'; public $data = 'Some data'; public function __set($property_name, $property_value) { if ($property_name == self::CHILD_PROPERTY_NAME) { $property_value->set_parent_object($this); } } } class ChildClass { private $parent_object = null; public function set_parent_object($object) { $this->parent_object = $object; echo $this->parent_object->data; } } $p = new ParentClass(); $p->child = new ChildClass();
Some data
관련 자료
- C ++ 부모 개체가 자식 개체의 내부 데이터를 잃습니다 복사 생성자 또는 참조로 전달과 관련된 문제가 있습니까?
- laravel - Vuejs를 사용하여 axios catch 블록에서 부모 구성 요소로 객체를 전달하는 방법
- Django - 장고 - 템플릿에서 부모 개체를 어떻게 렌더링합니까?
- winforms - Mdi 부모를 개체로 열면 VBNet의 다른 Mdi 자식 양식에서 Mdi 자식 양식을 열 수 없습니다
- java - uml 객체 다이어그램 - 상위 또는 하위
- loops - 파이썬 - 두 개체 목록을 반복하고 부모 인스턴스 이름을 가져옵니다
- javascript - vue - 상위 중첩 개체 액세스 이미지
- javascript - Loader의 구성 요소를 QtQuick 객체의 부모로 만드는 방법은 무엇입니까?
- Java - 자바 - 모든 하위 클래스의 인스턴스를 저장할 수있는 부모 클래스 개체를 만들 수 있습니까?
- java - 부모 또는 지정된 ID와 일치하는 자식 중 하나 일 수있는 목록에서 개체를 가져 오는 방법
- mysql - 특정 값을 가진 자식이 아닌 부모 개체를 검색하는 방법은 무엇입니까? 후유증
- vue.js - 객체의 객체에서 부모로 자식 전파
- django - 부모 개체와 자식 개체 목록을 동일한 형식으로 만들 수 있습니까
관련 질문
- OOP PHP를 사용하면 객체를 다시 인스턴스화하지 않고 어떻게 업데이트된 객체를 얻을 수 있습니까?
- PHP 객체 지향 양식 생성기
- PHP는 함수의 정적 범위에서 잘못된 변수를 던졌습니다.
- Python3의 외부 및 내부 클래스에 대해 동일한 객체를 사용하여 내부 클래스에 인수를 전달하는 방법은 무엇입니까?
- python : 사용자가 입력한 내용에 따라 클래스 내부에 개체 그룹을 만들려면 어떻게 해야 합니까?
- 자식 PHP에서 부모 클래스 변수를 정적으로 재정의
- 오류를 생성하지 않고 PHP>= 5.3 엄격 모드에서 객체에 속성을 추가하는 방법
- php : Woocommerce가 로드되었는지 확인하는 방법은 무엇입니까?
- php : oop -확고한 원칙
- php : 데이터베이스 연결 클래스 생성자
호출 할 방법이 없습니다
B에서 $parent에 대한 참조를 자동으로 갖습니다.
<시간>일반적으로 클래스를 구성하는 네 가지 방법이 있습니다 :
1. 주입을 통해 부모 개체를 집계합니다 (예 :
객체가 생성 될 때 부모가 있어야하는 경우 생성자 주입을 사용하십시오. 이것은has-a관계이며 매우 느슨한 결합을 만듭니다. B에는 하드 코딩 된 종속성이 없으므로 UnitTesting시 Mock과 같은 Parent 인스턴스를 쉽게 교체 할 수 있습니다. Dependency Injection을 사용하면 코드를 유지 관리하기가 더 쉬워집니다.
UseCase에서
$parent
를 전달합니다 B를 만들 때 B로 :2. 컴포지션 사용
이것은has-a관계이지만 Parent 클래스를 B에 연결합니다. 또한 기존 Parent 인스턴스가 아니라 새 인스턴스입니다. 표현에서 나는 아이가 부모를 만든 것이 다소 이상하다는 것을 알았습니다. 의존성이 루트 클래스 외부에 존재하지 않는 것으로 간주되는 클래스이지만 그것이 나타내는 모든 것의 일부인 경우에 이것을 사용하십시오.
UseCase에는
$parent->child = new B();
를 수행 할 방법이 없습니다 $parent가 Singleton이 아니라면이 방법을 사용할 때 부모가 무엇인지 알고 있어야합니다. 그렇다면 Singleton 인스턴스를 얻을 수 있습니다 (예 : 와이즈 비즈 원하는 것을 달성하기 위해 싱글 톤은 모든 사람이 좋아하는 패턴이 아닙니다. 테스트하기 어렵다.3. 상속 사용
이 방법으로is-a관계를 만듭니다. Parent 클래스의 모든 공개 및 보호 메소드 및 속성 (특정 인스턴스는 아님)은 B에서 사용할 수 있으며
class B extends Parent { public function accessParent() { $this->someMethodInParent(); } }
를 통해 액세스 할 수 있습니다. B 인스턴스의 키워드.UseCase의 경우,이 방법은 작동하지 않습니다. Parent 인스턴스를 전혀 가질 필요는 없지만 B는 생성 될 때 Parent의 모든 것을 캡슐화합니다
4. 글로벌 키워드 사용
와이즈 비즈 키워드는 전역 변수를 현재 범위로 가져옵니다. 일반적으로 OO 컨텍스트에서 global 키워드를 사용하지 말고 위의 다른 세 가지 방법 중 하나, 바람직하게는 첫 번째 방법을 사용하십시오. 언어 기능이지만 눈살을 찌푸리게합니다. 첫 번째 언어와 가장 근접한 것입니다 (예 :
어쨌든 도움이 되길 바랍니다.