課題の、勇者の転職について

質問
public function jobChange($newJob)
  {
    $oldJob = $this->job;
    $this->job = $newJob;
    echo "{$this->getName()}のジョブが{$oldJob}から{$newJob}に切り替わりました。n";
  }


この部分について、$oldJob = $this->job と、$this->job = $newJob とありますが、なぜこれで
出力した際にどちらも魔法使い($newJob)になってしまわないのか、仕組みが知りたいです。

回答 ( 1 )

  1. 2024-03-29T15:13:27+09:00
    【回答】
    プログラミングは基本的に上から処理が進んでいき、1行が完了したら次の行の処理が行われるからです。
    
    【詳細】
    $oldJob = $this->job・・・ⅰの処理とします
    $this->job = $newJob・・・ⅱの処理とします
    ⅰの処理では$oldJobに$this->jobの値が代入され処理が完了します。
    この時点ではどちらも「剣士」が入ってます。
    次にⅱの処理では$this->jobに$newJobの値が代入され、処理が完了します。
    この時点では$this->jobも$newJobも魔法使いが入ります。
    ⅰとⅱが終わった時点でそれぞれの変数の中身は
    $oldJob・・・剣士
    $this->job・・・魔法使い
    $newJob・・・魔法使い
    となるので、出力結果は教材の課題2の通りになります。
    ⅱの処理が完了した時、$oldJobの中身が書きかわらないことがポイントです。
    
    【補足】
    上記のような代入処理は値渡しと言います。
    逆に書き変わるときは参照渡しと言われる仕組みになっています。その時は&を使います。
    詳しくは以下の記事がわかりやすいですので参考にされてみてください。
    https://qiita.com/A-Kira/items/749de2c83dfd07feb3b3
    
    =====
    ベストアンサー

回答する

申し訳ありません。現在回答の投稿を停止しています。