Kintarou'sBlog

プログラミング学習中。学習内容のアウトプットや読書で学んだことなど随時投稿!

【PHP】外部ファイルの読み込み

こんにちは😊Kintarouです。

現在エンジニア転職を目指してプログラミング学習中です👨‍🎓
夢はフリーランスエンジニアになって働く人にとって働く事が楽しくなるシステムを作ること!
と、愛する妻と海外移住すること🗽

プログラミングや読んでいる本のことなど、ブログに書いていきます!
twitter : https://twitter.com/ryosuke_angry


今回参考にさせて頂いたサイト様🙇‍♂️ dotinstall.com


外部ファイルを読み込む

外部のファイルを読み込む方法です。
純粋に外部ファイルを使いたい時や、コードが長くなってファイルを分割したい場合に使えます。

記述 処理
require 外部ファイルを読み込む。読み込めなかった場合処理が止まる。
include 外部ファイルを読み込む。読み込めなかった場合も処理は止まらない。
require_once requireと同じだが、既に読み込まれていたらスキップする。
include_once includeと同じだが、既に読み込まれていたらスキップする。

仮にUserクラスの記述を読み込んで、別ファイルとしてメソッドを使ってみます。
User.phpファイルとmain.phpファイルに分けますが、2つのファイルは同階層上にあるとします。

■User.php (Userクラスの定義のみ記述)

<?php

class User
{
  private $name;

  public function __construct($name)
  {
    $this->name = $name;
  }

  public function profile()
  {
    printf('%s' . PHP_EOL, $this->name);
  }
}

■main.php (実行するコードを記述)

<?php

#requireでUser.phpファイルを呼び出しています。
require('User.php');

$users = [];
$users[0] = new User('Kintarou');
$users[1] = new User('Kinjirou');


#User.php上のメソッドが問題なく読み込まれています。
foreach($users as $user) {
  $user->profile();
}

#=>Kintarou
#=>Kinjirou

外部ファイルを自動で読み込む

クラスをファイル毎に分けたは良いものの、いちいちクラス毎にrequireするのは面倒となった場合にspl_autoload_register(spl => standard php library)という関数が使えます。

先ほどの例のmain.phpのみ変更します。

■main.php

<?php

#この記述により、クラスがnewされた時にrequireされていなければ、newされたクラス名を$classに代入してクラス名.phpファイルを読み込む。
spl_autoload_register(function ($class){
  require($class . '.php');
});

$users = [];
$users[0] = new User('Kintarou');
$users[1] = new User('Kinjirou');

foreach($users as $user) {
  $user->profile();
}

#=>Kintarou
#=>Kinjirou

以上、どなたかの参考になれば幸いです😊