2016-11-15 1 views
0

OOP PHP를 배우고 있습니다. 다른 클래스의 메서드를 새로운 클래스로 호출하고 싶습니다.새 클래스의 다른 클래스에서 메서드 호출 - PHP

단지 예를 들어

:

<?php 
class Aclass { 
function aMethod($input) 
    { 
     echo 'Hello a world '; 
    } 
} 
?> 

그리고 난 새로운 클래스로 클래스 'Aclass'의 방법에 따른 방법으로 전화를합니다.

<?php 
class Bclass { 
//calling the method here? 
} 
?> 

저는 여전히 노력하고 있습니다.

감사합니다.

+1

'연장을 시도했지만 여전히 나를 위해 일하지 않습니다. '- 아마도 당신의 시도를 보여 주시겠습니까? –

+0

내 솔루션이 도움이 되었습니까? –

+0

예 해결책이 나를 위해 일했습니다. @KarolGasienica .. –

답변

0

. "B을 만들 때 A 클래스의 객체를 보내는 것"을 말하는 멋진 방법입니다. 난 그냥 내 의존성을 저장 한 이유

는 생성자가의 객체를 생성하는 데 사용하기위한 것입니다
class typeA { 
    public function __construct() {}; 
    public function test() { 
     return 'Test string'; 
    } 
} 

class typeB { 
    protected $testObj; 

    public function __construct (typeA $testCase)  { 
     $this->testObj = $testCase; 
    } 

    public function getTest() { 
     return $this->testObj->test(); 
    } 
} 

$a = new typeA(); 
$b = new typeB ($a); 
echo $b->getTest(); 

준비 사용할 수 : 즉

,이 같은 typeB 개체 자체 그런 다음 getTest() 메서드에서 나는 그것에 따라 필요한 데이터를 얻기 위해 내가 의존하고있는 객체의 test() 메서드를 호출합니다.
이렇게하면 확장 가능한 확장형 OOP 코드를 작성할 수 있습니다. 객체를 생성하여 생성자 내부의 종속성을 숨김으로써 숨겨진 종속성을 만듭니다. 클래스 기반 디자인의 확장 성을 적절히 활용하기 위해, 불가능하지는 않더라도 훨씬 어렵게 만드는 것.

+0

초보자에게는 어려울 수 있습니다 : D 그리고'Bclass'의 몇 가지 상황에서만 몇 가지'Aclass' 메소드를 사용한다면 왜 항상 생성해야합니까? 처음에는 새로운 인스턴스? –

+0

@KarolGasienica 초급자에게는 어려울 것이라고 나는 동의하지 않는다. 적절한 의존성 주입이 없다면 장기적으로 힘들어지고 무언가가 바뀔 필요가있을 때 두통이 생길 수 있습니다. 좋은 OOP 습관을 시작하는 것이 더 좋습니다. 따로 : 내부 상태가없는 몇 가지 메서드 만있는 클래스가 다른 클래스 하나에서만 사용되는 경우 : 먼저 클래스를 클래스로 만들 필요성을 다시 확인합니다. – ChristianF

2

클래스 Bclass에서 몇 가지 기능을 만들어야합니다. 아래의 경우 Aclass의 새 인스턴스를 만든 다음 함수 aMethod을 사용하여 만듭니다.

<?php 
class Bclass {  
    public function __construct() { 
     $a = new Aclass(); 
     $a->aMethod("some_text"); 
    } 
} 
?> 

기타 Bclass 방법을 확장한다. 이 경우 클래스 BclassAclass에있는 모든 것을 확장하므로 $this과 함께 사용할 수 있습니다.

<?php 
class Bclass extends Aclass { 
    public function __construct() { 
     $this->aMethod("some_text"); 
    } 
} 
?> 

예는 또한 함수 AclassaMethod 공개 또는 보호 가시성을 확보해야한다. 인스턴스를 만들면 공용으로, 확장하면 보호됩니다. 더 자세한 정보는 매뉴얼의 끝에 있습니다.

당신은 물론 __construct에서뿐만 아니라 다른 기능에서뿐만 아니라 두 가지 방법을 사용할 수 있습니다

<?php 
class Aclass { 
public function aMethod($input) // protected if you will extend this class 
    { 
     echo 'Hello a world '; 
    } 
} 
?> 

예.

설명서 나 의존성 주입을 사용하는 것이 들어

PHP: Visibility

PHP: Constructors and Destructors

+0

첫 번째 경우에는 public이어야하며 두 번째 경우에는 public 또는 protected가 될 수 있습니다. –

+1

'print_r'이 필요하지 않습니다.이 함수는 이미 echos입니다. 그리고 아마도'$ this-> aMethod'는 생성자뿐만 아니라'class'의 어느 곳에서나 사용될 수 있습니다. – RST

+0

@RST 당신이 맞습니다 :) 고마워요! –

관련 문제