나는 많은 공개 및 비공개 방법이있는 클래스 Foo
을 가지고 있습니다. 이러한 메소드 중 하나가 상당히 커지고 있으며이를 위해 특별히 별도의 클래스로 포크 화하려고합니다. 이런 식으로 뭔가 :PHP의 친구 수업 시뮬레이트
<?php
class Foo
{
// ...
public function doX($a, $b)
{
$x = new FooXDoer;
$x->foo = $this;
return $x->run($a, $b);
}
// ...
}
class FooXDoer
{
public $foo;
public function run($a, $b)
{
// ...
}
// ...
}
FooXDoer
이 Foo
의 공개 방법 및 속성 $this->foo
를 통해 액세스 할 수 있습니다.
어떻게 이미 Foo
를 사용하는 코드의 나머지 부분에 공개하지 않고, Foo
의 개인 메서드와 속성에 FooXDoer
액세스 권한을 부여 할 수 있습니까?
private 메서드가 public이고, Foo
이 랩핑 된 별도의 클래스 FooPrivate
을 만들고 FooXDoer
을 참조해야합니까? 무엇 FooPrivate
전화해야합니까?
아니면 내 접근 방식이 완전히 잘못 되었습니까? 이 문제를 어떻게 해결합니까?
당신이 여기서하려고하는 것은 꽤 분명하지 않다.실제 사례를 사용할 수 있습니까? – Sherlock
클래스 사이의 기능을 분리하려면 클래스에 정보가 있는지 확인하십시오. 함수 X가 객체 y의 데이터에 의존하고 그것에 대한 조작을 수행한다면 객체 y에 기능을 유지하는 것이 좋습니다. – bkwint
나는 make 'public으로 말하고 싶지만, 다른 코더들에게 경고하기 위해 코멘트에 넣는다. 당신이 프로그래밍 방식으로 다른 클래스의 액세스를 막을 수있는 무언가를 만들 수는 있지만 꽤 좋지는 않을 것입니다. –