2016-07-11 5 views
0

일부 문자열 입력 ($age)에 대해 "나이가 젊다", "십대입니다"및 "나이가 들었습니다"를 다시 입력해야하는 것은 입력 한 나이에 따라 다릅니다.OOP 클래스 및 인스턴스

그것으로 문제는, 내 코드를 잘못 든, 내가 PHP에서 OOP와 시작 부분에, 그래서 당신은 몇 가지 설명과 함께 나를 도울 수 있다면, 내가

<form action="classvsinstance.php" method="get"> 
    <input type="text" name="age" placeholder="age"> 
    <input type="submit" value="submit"> 
</form> 
감사하게 될 것입니다 것이다 클래스

$p = new Person($age); 
를 인스턴스화

class Person{ 
    public $age; 
    public function __construct($initialAge){ 
     // Add some more code to run some checks on initialAge 
     if($initialAge < 0){ 
      $age = 0; 
      print('Age is not valid, setting age to 0.'); 
     } else { 
      $initialAge = $age; 
     } 
    } 
    public function amIOld(){ 

     if($age < 13){ 
      print("You are young."); 
     }elseif(($age>=13) && ($age < 18)){ 
      print("You are a teenager."); 
     }else{ 
      print("You are old"); 

    } 
    public function yearPasses(){ 
     // Increment the age of the person in here 
     $age++; 
    } 


} 

$age = $_GET['age']; 
echo "Your age is " . $age . ".<br><br>"; 

방법에게 나가 형태에 넣어 모든 번호에 대한

$ -> amIOld(); 
echo "\n"; 

모든 출력을 호출

는, "당신은 젊은이다"입니다.

나는 왜 그런지 잘 모르겠다. 나는 여기서 잘못하고있다. 좋은 방법을 제외한 모든 방법을 시도했다.

+1

클래스 내부에는'$ age' 대신'$ this-> age'가 사용됩니다! –

+1

각 클래스 메소드에서 로컬 인스턴스보다는'$ age' 클래스를 참조해야합니다. $ this-> age'를 사용하면됩니다. * $ age와 동일하지 않습니다. 당신의 방법. 'yearPasses'의'$ age'는 항상 그 함수/메소드가 끝나자 마자 그 값을 잊어 버리기 때문에 항상 0 -> 1이 될 것입니다. 'amIOld()'와 동일하다. * class * 값'$ this-> age'을 참조하지 않는다. – Martin

+1

"정의되지 않은 변수"오류를보고하지 않으므로 아마도 display_errors 및 error_reporting이 비활성화되어있을 것이다. 그들은 devel/debug 시스템에서 결코 벗어나서는 안됩니다. –

답변

3

귀하의 구조는 다음과 같이해야한다, 거꾸로 일을 assiging된다

public function __construct($initialAge){ 
     // Add some more code to run some checks on initialAge 
     if($initialAge < 0){ 
      $this->age = 0; 
      print('Age is not valid, setting age to 0.'); 
     } else { 
      $this->age = $initialAge; 
     } 
} 

당신은 클래스 변수 $age 다른 방법은 주위에 $initialAge에서 할당되고 싶어요. 그런 다음 $this 키워드로 클래스 변수를 참조 할 필요가 : 당신이 객체로 작업하기 때문에

public function amIOld(){ 
     if($this->age < 13){ 
      print("You are young."); 
     }elseif(($this->age>=13) && ($this->age < 18)){ 
      print("You are a teenager."); 
     }else{ 
      print("You are old"); 
     } 
    //^closing brace was also missing! 
} 

public function yearPasses(){ 
     // Increment the age of the person in here 
     $this->age++; 
} 

, 당신은 나이가 유효하지 않은 경우 예외를 던지는 같은 다른 OOP 기능을 사용한다. 그리고 수업 시간에 메시지를 출력하지 않아야합니다. 클래스의 반환 값을 기반으로 외부에서 코드를 처리하도록합니다.

+0

그것이 문제였습니다. 이제 어떻게 작동하는지 이해합니다. 고맙습니다 ! –