2014-09-06 2 views
0

나는 Wolf 클래스의 메서드에서 Dog 클래스의 다른 메서드에 액세스하려고 할 때 문제가 있습니다. 즉, 코드입니다 :개체가 아닌 개체에 대한 호출 오류

index.php를

require_once 'Wolf.php'; 
    require_once 'Dog.php'; 

    class StackOverflowExample{ 
     public static function run(){ 
      $dog = new Dog("Cokey"); 
      $wolf = new Wolf("Wolfenstein"); 

      $wolf->hunt(); 
     } 
    } 
    StackOverflowExample::run(); 

Wolf.php

class Wolf { 

    private $_name; 

    public function __construct($name){ 
     $this->_name = $name; 
    } 

    public function hunt(){ 
     return $dog->setLife(0); 
    } 

} 

Dog.php

class Dog { 
    private $_name; 
    private $_life= 100; 

    public function __construct($name){ 
     $this->_name = $name; 
    } 

    public function setLife($life){ 
     $this->_life = $life; 
    } 

    public function getLife(){ 
     return $this->_life; 
    } 
} 

그것은 나에게 다음 오류를 제공합니다 · 정의되지 않은 변수를 : dog · 개체가 아닌 개체에서 setLife() 함수 호출

2 일 동안 검색을 했는데도 문제가 해결되지 않았습니다. 나쁜 영어로 죄송합니다.

+1

$ 개에서 전역 변수 아니다 당신은 w/ – MrTux

답변

0

당신이해야 할 것은 다음과 같이 사냥 방법으로, 약 $ 개를 전달하는 것입니다 :

public function hunt(Dog $dog){ 
    return $dog->setLife(0); 
} 

당신은 개 변수가 예상되는 클래스의 인스턴스 인 것을 검증 할 수있는 능력을 얻는다. 이 객체 전달 방법을 종속성 주입이라고합니다.

당신이 동물의 모든 종류의 주변에 전달하려는 경우 다른 개념에게 전화 상속 사용해야 :

abstract class Animal 
{ 
    public $_life; 

    public function setLife($life){ 
     $this->_life = $life; 
    } 

    public function getLife(){ 
     return $this->_life; 
    } 

} 

class Dog extends Animal 
{ 
    private $_name; 

    public function __construct($name){ 
     $this->_name = $name; 
    } 
} 

class Wolf { 

    private $_name; 

    public function __construct($name){ 
     $this->_name = $name; 
    } 

    public function hunt(Animal $animal){ 
     return $animal->setLife(0); 
    } 

} 

공지 사항 일반적인 방법과 변수는 상위 클래스에 살고 있음을, 그리고 당신은 많은을 만들 수 있습니다 원하는대로 동물을 입력하십시오.

당신은 당신이 모든 서브 클래스에서 다시 정의 할 필요가 없습니다 동물 클래스에 동물의 이름 변수를 선언 할 수있는 방법을 찾아야한다이 예를 따르는 경우)

+0

그리고 제가 여러 클래스에서 개체를 전달하려면 초기화 O를 Wolf.php에 액세스하는거야? – suarsenegger

0

교체를

$dog->setLife(0); 

Dog::setLife(0); 
관련 문제