paiza レベルアップ問題集クラス・構造体メニュー 「クラスの作成 PHP編」解答失敗→解答成功

classがどうしても理解できません。助けていただけないでしょうか
→コメントありがとうございました‼ 解けました

問題はこちら(下にも転記)

https://paiza.jp/works/mondai/class_primer/class_primer__make_class


エンジニアであり、社員を管理を管理する立場にあるあなたは、効率的に社員を管理するために、
各社員の社員番号 number と名前 name を持ち、加えて情報を返す関数を持つような構造体、すなわち次のようなメンバ変数とメンバ関数を持つ社員クラス class employee を作成することにしました。

メンバ変数

number : 整数
name : 文字列

メンバ関数

getnum(){
return number;
}
getname(){
return name;
}

入力で make number name と入力された場合は変数に number , name を持つ社員を作成し、 getnum n と入力された場合は n 番目に作成された社員の number を、getname n と入力された場合は n 番目に作成された社員の name を出力してください。


ダメだったコード。
見よう見まねでうったコードがこちら

<?php
    // ダメだったコード

    $num = trim(fgets(STDIN));
    for ($i = 0; $i < $num; $i++) {
        $s = trim(fgets(STDIN));
        $s = str_replace(array("\r\n","\r","\n"), '', $s);
        $s = explode(" ", $s);
        //echo "hello = ".$s[0]." , world = ".$s[1]."\n";
        
        $inputs[$i][0] = $s[0];
        $inputs[$i][1] = $s[1];
        
        if($s[0]=="make"){//3つめの要素があるのは命令がmakeのときだけ
            $inputs[$i][2] = $s[2];
        }
    }

    //print_r($inputs);
    
    
    
    for($i=0; $i<$num; $i++){
        
        if($inputs[$i][0]=="make"){
            $dog = new employee($inputs[$i][1],$inputs[$i][2]);
            $dog_num = $dog->getNum();
            $dog_name = $dog->getName();
            
            
        }elseif($inputs[$i][0]=="getnum"){
            //echo "番号: " . $dog_num . "\n";
            echo ($dog_num . "\n");
            
        }else{
            //echo "名前: " . $dog_name . "\n";
            echo ($dog_name . "\n");
        }
    }
    


    // employeeのClassを定義
    class employee {
    
       // プロパティを定義
        private $number;
        private $name;

       // インスタンス化するときに引数を受け取れるようにする
        public function __construct($number,$name) {
              $this->number = $number;
              $this->name = $name;
        }

    
       // 数字を取得するメソッドを追加
        public function getnum(){
            return $this->number;
        }
        public function getname(){
            return $this->name;
        }
     
    }


?>

だめでした

もしアドバイスなど頂けましたら大変大変ありがたいです

粉コーヒーさんのコメントのおかげで理解できました。ありがとうございました!

通りました

for文のところも無駄に複雑になっていたため精査しました。
修正コード

<?php
    // 自分の得意な言語で
    // Let's チャレンジ!!
    
    /*
    ・ 1 行目では、与えられる入力の回数 N が与えられます。
    続く N 行では、次のいずれかの形式の入力が与えられます。
    ・ make number name
    ・ getnum n
    ・ getname n
    */
    
    $num = trim(fgets(STDIN));
    
    for ($i = 0; $i < $num; $i++) {
        $s = trim(fgets(STDIN));
        $s = str_replace(array("\r\n","\r","\n"), '', $s);
        $s = explode(" ", $s);
        //echo "hello = ".$s[0]." , world = ".$s[1]."\n";
        
        $commond = $s[0];
        $no = $s[1];
        if($commond=="make"){
            $name = $s[2];
        }
        
        
        if($commond=="make"){
            $dogs[] = new employee($no,$name);

        }elseif($commond=="getnum"){
            echo ($dogs[$no-1]->getnum()), PHP_EOL;
        }elseif($commond=="getname"){
            echo ($dogs[$no-1]->getname()), PHP_EOL;
        }

        
    }

    
    //Classを定義
    class employee {
    
        // プロパティを定義
        private $number;
        private $name;
        
        // インスタンス化するときに引数を受け取れるようにする
        public function __construct($number,$name) {
            $this->number = $number;
            $this->name = $name;
        }
        
        // 数字を取得するメソッドを追加
        public function getnum(){
            return $this->number;
        }
        public function getname(){
            return $this->name;
        }
    
    }



?>

あぶらぼうず
ありがたさに恐縮のあぶらぼうず

paiza レベルアップ問題集クラス・構造体メニュー

https://paiza.jp/works/mondai/class_primer/class_primer__make_class
0

paiza レベルアップ問題集クラス・構造体メニュー 「クラスの作成 PHP編」解答失敗→解答成功」への2件のフィードバック

  1. 砂コーヒー 返信

    dogを配列のclassにしてこうじゃないかな

    $num = trim(fgets(STDIN));
    for ($i = 0; $i < $num; $i++) {
    $s = trim(fgets(STDIN));
    $s = str_replace(array("\r\n","\r","\n"), '', $s);
    $s = explode(" ", $s);
    //echo "hello = ".$s[0]." , world = ".$s[1]."\n";

    $inputs[$i][0] = $s[0];
    $inputs[$i][1] = $s[1];

    if($s[0]=="make"){//3つめの要素があるのは命令がmakeのときだけ
    $inputs[$i][2] = $s[2];
    }
    }

    //print_r($inputs);
    $cnt=0;
    for($i=0; $igetNum();
    echo ($dog_num . “\n”);

    }elseif($inputs[$i][0]==”getname”){
    //echo “名前: ” . $dog_name . “\n”;
    $dog_name = $dog[$inputs[$i][1]-1]->getName();
    echo ($dog_name . “\n”);
    }
    }

    // employeeのClassを定義
    class employee {

    // プロパティを定義
    private $number;
    private $name;

    // インスタンス化するときに引数を受け取れるようにする
    public function __construct($number,$name) {
    $this->number = $number;
    $this->name = $name;
    }

    // 数字を取得するメソッドを追加
    public function getnum(){
    return $this->number;
    }
    public function getname(){
    return $this->name;
    }

    }

    1+
    • karasumaru 投稿者返信

      コード大変ありがとうございます。
      これはちょっと消化するのに時間がかかりそうなので、書いていただいたコードをみて
      よく勉強したいと思います。ありがとうございました!

      0

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です