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