2016-07-11 8 views
0

一部の文字列入力($age)では、「あなたは若い」、「あなたはティーンエイジャー」、「あなたは古い」という出力は、入力した年齢によって異なります。OOPクラスとインスタンス

それに伴う問題、私のコードは何とか間違っているようだということである、 私はPHPOOPと冒頭でよ、あなたは、いくつかの説明で私を助けることができる場合、私はありがたい

<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"; 

私は形に入れておき番号のすべての出力を呼び出す

は、「あなたが若い」です。

なぜ私はここで間違っているのか分かりません。私はすべての方法を試しました(良いものを除いて)。あなたの構築物は後方物事をassigingさ

+1

クラス内では、 '$ age'の代わりに' $ this-> age'を使用してください! –

+1

それぞれのクラスメソッドでは、ローカルインスタンスではなく '$ age'クラスを参照する必要があります。これは' $ this-> age'で行います。*これは$ ageと同じではありません。あなたの方法。 'yearPasses'の' $ age'は常にその関数/メソッドが終了するとその値が忘れられるので0 - > 1になります。 '$ this-> age' – Martin

+1

あなたは"未定義変数 "エラーを報告していないので、display_errorsとerror_reportingを無効にして実行している可能性があります。彼らはdevel/debugシステム上で決して離れてはいけません。 –

答えて

3

、それは次のようにする必要があります:

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

それは問題だった、今私はそれがどのように動作するのか理解する。ありがとうございました ! –

関連する問題