今Paizaラーニングを解いていて、もはやCレベルには達しており、
pythonも扱えるようになってきたので、Cクラスの残りの部分はもうストップして
Bクラスの問題集に行こうと思います。
前回は、下記でやっていますが下手すぎたので
再度やります。
まず構造体ってなんだ?というところから始めたので、
そこらへんは前回のを見て下さい。
ただ、PHPのコードは修正します。
<?php
class User{
private string $nickname;
private int $old;
private string $birth;
private string $state;
public function __construct($nickname,$old, $birth, $state) {
$this->nickname = $nickname;
$this->old = $old;
$this->birth = $birth;
$this->state = $state;
}
public function getOutput(){
$output = "User{" . "\n";
$output = $output ."nickname : " .$this->nickname. "\n";
$output = $output ."old : " .$this->old. "\n";
$output = $output ."birth : " .$this->birth. "\n";
$output = $output ."state : " .$this->state. "\n";
$output = $output ."}" . "\n";
return $output;
}
}
//main
$N = trim(fgets(STDIN));
for($i=0; $i<=$N; $i++){
list($nickname, $old, $birth, $state) = explode(" ", str_replace(array("\r\n","\r","\n"), '', fgets(STDIN)));
$member = new User($nickname, $old, $birth, $state);
echo $member->getOutput();
}
?>
アウトプットはうまくいっているんですがランタイムエラーが。。。
PHP Warning: Undefined array key 1 in /workspace/Main.php on line 29
PHP Warning: Undefined array key 2 in /workspace/Main.php on line 29
PHP Warning: Undefined array key 3 in /workspace/Main.php on line 29
PHP Fatal error: Uncaught TypeError: Cannot assign null to property User::$old of type int in /workspace/Main.php:10
Stack trace:
#0 /workspace/Main.php(30): User->__construct()
#1 {main}
thrown in /workspace/Main.php on line 10
29行目というと、この部分ですね。
list($nickname, $old, $birth, $state) = explode(" ",trim(fgets(STDIN)));
list()を使わないとエラーが消えるので
list()に問題があるようです。
ただ、このlist()のエラーに関してまだ調べられていないので
原因が分かり次第こちらに上げます。
ひとまずlist()を使わない方法で解決。
<?php
class User{
private string $nickname;
private int $old;
private string $birth;
private string $state;
public function __construct($nickname,$old, $birth, $state) {
$this->nickname = $nickname;
$this->old = $old;
$this->birth = $birth;
$this->state = $state;
}
public function getOutput(){
$output = "User{" . "\n";
$output = $output ."nickname : " .$this->nickname. "\n";
$output = $output ."old : " .$this->old. "\n";
$output = $output ."birth : " .$this->birth. "\n";
$output = $output ."state : " .$this->state. "\n";
$output = $output ."}" . "\n";
return $output;
}
}
$num = trim(fgets(STDIN));
for($i=0; $i<$num; $i++){
$arr = explode(" ", str_replace(array("\r\n","\r","\n"), '', fgets(STDIN)));
//下でもOKだが、下の方が簡単かな
//$arr = explode(" ", trim(fgets(STDIN)));
$member = new User($arr[0], $arr[1], $arr[2], $arr[3]);
echo $member->getOutput();
}
?>