引数の型が異なるようですがどう直したらいいかわかりません
解決したいこと
引数の型が間違っているようでうまく動きません。
どのように直せばいいか教えてください。
プログラム初心者です。お手柔らかにお願いいたします。
ポケモンで学ぶphpというブログが存在したので、オブジェクト指向の練習として記述しているのですが、ブログの記載内容と同じように記述しているのですが、私の環境?ではうまくプログラムが動きません。
どう手直ししたらよいのでしょうか。
解決方法を教えて下さい。
発生している問題・エラー
画像参照
### 該当するソースコード
```言語名
ソースコードを入力
========
/**
* アクション
*
* @param string $action
* @param mixed $param
* @return void
*/
private function action($action, $param)
{
// 敵ポケモンの技をインスタンス化
$e_move = $this->getInstance($this->aiSelectMove());
switch ($action) {
// にげる
case 'run':
if($this->checkRun()){
unset($_SESSION['enemy']);
unset($_SESSION['rank']);
unset($_SESSION['run']);
header("Location: ./home.php", true, 307) ;
exit;
}
$this->setMessage('逃げられない!');
$p_damage = $this->attack($this->enemy, $this->pokemon, $e_move);
break;
// たたかう
case 'fight':
// 自ポケモンの技をインスタンス化
$p_move = $this->getInstance($param);
// 行動順の判定
if($this->checkFirstMove($p_move, $e_move)){
// 先行
// 自ポケモンの攻撃
$e_damage = $this->attack($this->pokemon, $this->enemy, $p_move);
// 敵ポケモンの攻撃
$p_damage = $this->attack($this->enemy, $this->pokemon, $e_move);
}else{
// 後攻
// 敵ポケモンの攻撃
$p_damage = $this->attack($this->enemy, $this->pokemon, $e_move);
// 自ポケモンの攻撃
$e_damage = $this->attack($this->pokemon, $this->enemy, $p_move);
}
break;
/*$this->attack($this->pokemon, $this->enemy, $param);
$this->setResponse($this->pokemon->getRank(), $this->pokemon->getName());
$this->setResponse($this->enemy->getRank(), $this->enemy->getName());
break;*/
}
// 結果の返却
$this->setResponse([
'受けたダメージ' => $p_damage ?? 0,
'ランク' => $this->pokemon->getRank(),
], $this->pokemon->getName());
$this->setResponse([
'受けたダメージ' => $e_damage ?? 0,
'ランク' => $this->enemy->getRank(),
], $this->enemy->getName());
}
============
/**
* 先手の判定
*
* @param object 自ポケモンの技 $p_move
* @param object 敵ポケモンの技 $e_move
* @return boolean (pokemon > enemy):true (pokemon < enemy):false
*/
private function checkFirstMove($p_move, $e_move)
{
/**
* 優先度の比較
*/
// 判定
if($p_move->getPriority() > $e_move->getPriority()){
// 優先度が高い
return true;
}elseif($p_move->getPriority() < $e_move->getPriority()){
// 優先度が低い
return false;
}
/**
* すばやさの比較
*/
// 自ポケモンの素早さ(補正あり実数値)
$p_speed = $this->pokemon
->getStats('Speed', true);
// 敵ポケモンの素早さ(補正あり実数値)
$e_speed = $this->enemy
->getStats('Speed', true);
// 判定
if($p_speed > $e_speed){
// 素早さが上回っている
return true;
}elseif($p_speed < $e_speed){
// 素早さが下回っている
return false;
}elseif($p_speed === $e_speed){
// 同速(50%の乱数)
if(random_int(0, 1)){
return true;
}else{
return false;
}
}
}
============
trait InstanceTrait
{
/**
* インスタンス化関数
* @param string $class_name
* @return object
*/
protected function getInstance($class_name)
{
// 存在チェックをして読み込み
if(class_exists($class_name)){
return new $class_name();
}
}
}
==========