PHPオリジナル問題作成2

###続き

#オブジェクト指向、インスタンスとクラス
■問題１
other/Hero.php/Heroクラスを作成。name(String型),hp(int型)のフィールドを準備し、以下のメソッド作成。
メソッド名：sit
戻り値：なし
引数リスト：int sec
処理内容：
・自分自身のhpフィールドに引数(sec)をたす。
・自分自身のnameフィールドを表示。（表示形式：nameフィールド＋は＋引数(sec)＋秒座った。）
・引数(sec)を表示。（表示形式：HPが＋引数(sec)＋ポイント回復した。）

main8.phpでHeroインスタンスを生成。
nameフィールド：カズヤ(自身の名前)
hpフィールド：100
表示内容：
・sitメソッドを呼び出してください。（引数は5）
・hpフィールドを表示してください。

解答

```php:mai8.php
//問題１
<?php

namespace mondai\main;

use mondai\other\hero\Hero;

require 'other/Hero.php';

$hero = new Hero;
$hero->name = "カズヤ";
$hero->hp = 100;
$hero->sit(5);


echo $hero->hp;


//実行結果
カズヤは5秒座った
HPが5ポイント回復した
105

```

```php:Hero.php
<?php

namespace mondai\other\hero;


class Hero
{
    public String $name;
    public int $hp;

    public function sit (int $sec)
    {
       $this->hp +=$sec;

        echo $this->name."は".$sec."秒座った"."<br>";
        echo "HPが".$sec."ポイント回復した"."<br>";
  
    }
}

```

#さまざまなクラス機構、カプセル化
■問題１
other/Test2.php/Test2クラスを作成し、name(String型)、age(int型)フィールドを作成してください。(アクセス修飾子 private)
name,ageフィールドのgetter,setterを作成してください。
main9.phpでTest2インスタンスを生成。
Test2クラスのname、ageフィールドに値をセットしてください。（値はname(自分の名前),age(自分の年齢)）
name、ageフィールドにセットした値を表示させてください。
（表示形式：年齢は＋name(自分の名前)＋歳です）
（表示形式：名前は＋age(自分の年齢)＋です）

■問題２
other/Hero1.php/Hero1クラス作成し、hp(int型)のフィールド,Hero(コンストラクタ)を作成してください。※コンストラクタ（中身：this.hp=100;）
main9.phpでTest2インスタンスを2つ生成し表示させてください。(今回は100が２つ表示されているとOKです。)
解答

```php:main9.php
//問題１
<?php

namespace mondai\main;

use mondai\other\test\Test2;

require 'other/Test2.php';

$t = new Test2;
$t->setAge(26);
$t->setName("カズヤ");

echo "年齢は".$t->getAge()."歳です";
echo "<br>";
echo "名前は".$t->getName()."です";


//実行結果
年齢は26歳です
名前はカズヤです

```
```php:Test2.php
<?php

 namespace mondai\other\test;

class Test2{
    private String $name;

    private int $age;

    public function getName(){
        return $this->name;
    }
    public function setName(String $name){
        $this->name=$name;
    }
    public function getAge(){
        return $this->age;
    }
    public function setAge(int $age){
        $this->age=$age;
    }
    
}


```


```php:main10.php
//問題2
<?php

namespace mondai\main;

use mondai\other\hero\Hero1;

require 'other/Hero1.php';

$t = new Hero1;
$t1 = new Hero1;

echo $t->hp;
echo "<br>";
echo $t1->hp;




//実行結果
100
100
```

```php:Hero1.php
<?php

namespace mondai\other\hero;


class Hero1
{
    public int $hp;

    function __construct()
    {
        $this->hp = 100;
    }
}

```

#11継承
■問題１
other/Hero2.php/Hero2クラスを作成し、attackメソッド（内容：攻撃）、runメソッド（内容：逃げる）を追加してください。
other/SuperHero.php/SuperHeroクラス作成(Hero2クラスを継承)を作成し、
flyメソッド（内容：飛ぶ）、landメソッド（内容：着地）、runメソッド（内容：スーパーヒーローが逃げた）を追加してください。

main11.phpでSuperHeroインスタンス作成してください。
SuperHeroクラスのrunメソッド(内容：スーパーヒーローが逃げた)とHeroクラスのrunメソッド(内容：逃げる)を呼び出してください。

解答

```php:main11.php
//問題１
<?php

namespace mondai\main;

use mondai\other\hero\SuperHero;

require 'other/Hero2.php';
require 'other/SuperHero.php';

$s=new SuperHero;
$s->run();
echo "<br>";
$s->go();

//実行結果
スーパーヒーローが逃げた
逃げる

```

```php:Hero2.php
<?php

namespace mondai\other\hero;


class Hero2
{
    function attack()
    {
        echo "攻撃";
    }
    function run()
    {
        echo "逃げる";
    }
}


```

```php:SuperHero.php
<?php

namespace mondai\other\hero;


class SuperHero extends Hero2
{
    function fly(){
        echo "飛ぶ";
    }
    function land(){
        echo "着地";
    }

    function run()
    {
        echo "スーパーヒーローが逃げた";
    }

    function go(){
        parent::run();
    }
}

```

###続く