【今日のアウトプット】PHPの基礎学習

MAMPをインストールして、ローカル環境でPHPを使える準備とWordPressについて簡単に学習しました。
PHPWordPressをカスタムできるようになりたいので、まずはPHP学習を進めていこうという結論に至りました。

クラスとインスタンス

このあたりの概念はRubyと同じなのでサクッと。

<?php
  class User{
  }

  $user1 = new User(); //←インスタンスの生成
  $user2 = new User();
  $user3 = new User();
?>

注意点は、インスタンスの生成はクラスの外であること。

プロパティとメソッド

プロパティとは、実体を持つインスタンスのデータや値のこと。
例)name , age , price , color など
基本的には、

private $name;

と定義する。プロパティの呼び出しは、

$kyoro->name = 'KYORO';


メソッドとは、処理(関数)のこと。
例)getName , getTotalPrice など

<?php
public function getName(){
  echo "私の名前は{$name}です";
}
?>

と定義する。メソッドの呼び出しは、

<?php
$name->getName();
?.


$this

メソッド内でインスタンスのプロパティやメソッドにアクセスしたい時に使う。
$thisはクラス内のメソッドの中でのみ使える

__construct メソッド

メソッドを定義する際に、__constructを付けておくと、インスタンスを生成したと同時にそのメソッドが呼び出されるようになる。
Rubyのinitializeメソッドっぽいイメージ)
これらを踏まえて記述すると、

<?php
  class User{
    private $name;
    private $age;
    
    public function __construct($name, $age) {
      $this->name = $name;
      $this->age = $age;
    }
    
    public function getName() {
      return $this->name;
    }
    public function getAge() {
      return $this->age;
    }
  }

  $user1 = new User($name, $age); //←インスタンスの生成
  $user2 = new User($name, $age);
  $user3 = new User($name, $age);
?>
require_once
<?php
   require_once('ファイル名.php');
?>

とすることで、別のphpファイルを読み込むことができ、そこで定義されているクラスや変数を使うことができる。

画像の表示

HTMLタグの中にPHPを埋め込んで画像を表示する。

<?php
<img src="<?php echo $user->image ?>">
?>

しかし、$imageというプロパティは基本的にprivateで定義されているため、クラスにおいて以下の処理が必要。

<?php
  class User{
    private $image;
    
    public function __construct($image) {
      $this-> = $image;
    }
    
    public function getImage() {
    return $this->image;
    }
  }

  $user1 = new User($image); //←インスタンスの生成
?>
<?php
<img src="<?php echo $user->getImage() ?>">
?>

となる。

カプセル化

カプセル化とは、触れてほしくない値に関して敢えて隠すことで、使える機能を制限すること。 それは知らなくてもいいことだよってことかな(?)

上述のように基本的に、プロパティではprivate、メソッドではpublicでそれぞれ定義しています。

しかし、アクセス権をprivateにすると、プロパティの値をクラスから取り出したり、値を変更したりすることができなくなる。
これを解決するために、メソッドを作る。

プロパティを返すためだけのメソッド「ゲッター」を定義する

これが先程の、

<?php
public function getImage() {
    return $this->image;
    }
?>

getImageというメソッドで$imageプロパティの値をreturnしている。

プロパティの値を変更(セット)するメソッド「セッター」を定義する

たとえば個数をカウントするとき、クラスで$countNumというプロパティを定義し、初期値を0にする。
引数にクラス外からの値を受け取り、プロパティにその数を代入する。

<?php
  class User{
    private $countNum = 0;

  public function setCountNum($countNum){
    $this->countNum = $countNum;
  }
?>

終わりに

なるほど、少しややこしくなってきた。記述方法にしても、基礎の部分やっただけでRubyがいかにシンプルだったか分かる笑
カプセル化は学習が進むとより重要性増してきそうな気がするから、今日はこのゲッターとセッターについて抑えておけばオッケーてことにしとこう。