2013-11-20 2 views
0

Im 클래스에 새로운 Im 정말 이것을하는 방법을 모른다. Im을 (를) 처음 사용하는 사람들이 수업을 사용하는 데 익숙하지 않고 검색시 매우 나빠서 여기서 물어보기로했습니다. 내가 원하는 것은 클래스의 다른 함수로 전달 된 함수입니다. 다른 클래스 함수의 클래스 함수

나는 다음과 같이 호출을 시도하지만, 예를 들어 변수 $b

발견을 couldnt :

class a { 

function one() { 

$b->two(); 

} 

} 

class b { 

function two() { 

echo "two"; 

} 

} 

$a = new a(); 
$b = new b(); 

은 어떻게 이것을 달성 할을? 사전에

감사합니다!

답변

2

이 예제를 실행하기 전에 여러 가지 방법을 사용할 수 있습니다. 더 배우기 만하면 모두 스스로를 발견 할 수 있습니다. 방법 중 하나에 의해 :

class A { 

    public $b; 

    public function __construct(B $b) 
    { 
     $this->b = $b; 
    } 

    function one() 
    { 

     $this->b->two(); 
    } 
} 

class B 
{ 

    function two() 
    { 

     echo "two"; 
    } 
} 

$b = new B(); 
$a = new A($b); 

$a->one(); 

------- 편집 ------- 여전히 생성자를 사용하는 것을 알고 후 당신이 그것을 수정할 수 없습니다 경우

, 세터 또는 뮤 테이터 메서드를 사용해야합니다.

class A { 

    public $b; 

    public function setB(B $b) 
    { 
     $this->b = $b; 
    } 
    ... 
} 

class B { 

    ... 
} 

$b = new B(); 
$a = new A(); 

$a->setB($b); 
$a->one(); 
0

당신은 그렇게 할 수 없어 .. 당신에 대한 읽기해야합니까

: "상속"PHP에서.

는 기본적으로이 당신이 그것을 다소 이해를 달성 할 수 있도록하고 :

class A extends B { 
    function one() { 
     $this->two(); 
    } 
} 

class B { 
    function two() { 
     echo "two"; 
    } 
} 
0
class a { 
    function one() { 
     $b = new b(); 
     $b->two(); 
    } 
} 

class b { 
    function two() { 
     echo "two"; 
    } 
} 

$a = new a(); 
$a->one(); 

출력 :

two 
3

당신은 의존성 삽입 (Dependency Injection)에 대해 배울 필요가있다. 이 경우 AB에 따라 달라 지므로 A을 인스턴스화 할 때 A에 전달해야합니다. 또한 클래스 이름을 대문자로 사용하는 것이 표준 명명 규칙입니다. 가독성을 높이는 데 도움이됩니다.

class A { 
    public function __construct(B $B) { 
    $this->B = $B; 
    } 
    public function one() { 
    $this->B->two(); 
    } 
} 

class B { 
    public function two() { 
    echo "two"; 
    } 
} 

$B = new B(); 
$A = new A($B); 
$A->one(); 
+0

문제는 이미 데이터베이스에 클래스를 전달하기 위해 __construct를 해제 한 것입니다. – Jacob

+0

그건 문제가되지 않습니다. 당신이 이미 가지고있는 생성자에서 똑같은 일을하십시오. $ Database와 $ B를 전달하고 둘 다'$ this'로 설정하십시오. @ ilpaijin의 답변은 당신이 mutator 인 aka setter를 사용하여 이것을 할 수있는 또 다른 방법입니다. – m59

관련 문제