外部ファイルを読み込む
外部ファイルにPHPのプログラムの記述があれば、読み込むためのキーワード、require文等で読み込んだときに、そのプログラムが実行されます。代表的なものとして、require文とinclude文の例を以下に記載します。
require
記述内容を実際にWebサーバに出してみよう!
https://localhost/requrire_index.php を実行してみる。
|
1 2 3 4 |
<?php $fruit1 = 'apple'; $fruit2 = 'orange'; ?> |
|
1 2 3 4 5 6 7 8 9 10 11 |
<?php echo '$fruit1:'.$fruit1.'<br>'; echo '$fruit2:'.$fruit2.'<br>'; require 'require_index_2.php'; echo '$fruit1:'.$fruit1.'<br>'; echo '$fruit2:'.$fruit2.'<br>'; ?> |
include
|
1 2 3 4 5 6 7 8 9 10 11 |
<?php // include 使い方 // header.php を読み込む include('header.php'); // menu/side_menu.php を読み込む // includeのファイル名は、絶対パスまたは相対パスにて記述します。 include('menu/side_menu.php'); ?> |
- 「include」 エラーが出ても、その後の処理を続ける
- 「require」 エラーが出た場合、処理を中止する
require_onceとinclude_once
「require_once」と「include_once」は、同じファイルを複数回読み込んだ場合にエラーを防ぐために使用されます。ファイルが既に読み込まれている場合、再度読み込みません。
|
1 2 3 4 5 6 7 8 9 10 11 |
<?php // require_once() // include_once() // の使い型 // require_once 'test.php'; print $a; $a = "Hello, PHP\n"; require_once 'test.php'; print $a; //requie_once, include_once()を使うと、2度目の読み込みが行われていない. |
クラスを自動的に読み込む
spl_autoload_register()
未定義のクラス使用でエラーとなる前に、最後の救済メソッドとして登録しておいたメソッドの実行が可能になります。
記述内容を実際にWebサーバに出してみよう!
|
1 2 3 4 5 6 7 8 9 10 11 |
<?php // spl_autoload_register() のコールバックにある // $name には使おうとしているクラスの名前が渡されます。 // 例の場合は「Sample」という文字列 // spl_autoload_register(function($name){ include __DIR__ . DIRECTORY_SEPARATOR . $name . '.php'; }); $sample = new Sample;//実行1 $sample->hello();//実行4 |
|
1 2 3 4 5 6 7 8 9 |
<?php //実行2 class Sample { // 実行5 function hello(){ echo 'Hello, World!'; } } |
名前空間(namespace)
同じファイルに同じクラスや関数名、定数名が存在することはできませんが、名前空間を使用することにより、関連するクラスや、インターフェイス、関数、定数などをグループ化することが可能です。
記述内容を実際にWebサーバに出してみよう!
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
<?php namespace name1; function getName(){ return 'Samurai'; } namespace name2; function getName(){ return 'Engineer'; } ?> |
|
1 2 3 4 5 6 7 8 9 10 11 12 |
<?php //sample1.phpファイルを読み込む require_once 'sample1.php'; // 関数の呼出し // name1とname2を宣言して、その直後に関数を記述、 // name1のgetName関数とname2のgetName関数でそれぞれ区別される echo name1\getName(); echo name2\getName(); ?> |
名前空間(use)
useキーワードを使用して名前空間の一部を取得します。
記述内容を実際にWebサーバに出してみよう!
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
<?php namespace asia\japan\tokyo\shibuya; function getName(){ return 'shibuya'; } namespace asia\japan\tokyo\minato; function getName(){ return 'minato'; } namespace asia\japan\tokyo\shinagawa; function getName(){ return 'shinagawa'; } ?> |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
<?php //phpファイルを読み込む require_once 'place.php'; //名前空間をインポート use asia\japan\tokyo as name; //関数の呼出し echo name\shibuya\getName(); echo '<br>'; echo name\minato\getName(); echo '<br>'; echo name\shinagawa\getName(); ?> |
例外処理
プログラム実行中に発生したエラーのことを例外と言います。例外が発生すると、プログラムが異常終了してしまいます。システム的に異常終了はさせたくないので、例外を検知して、例外が発生した場合に行う処理を用意します。
|
1 2 3 4 5 6 7 8 9 10 11 12 |
<?php try { $a = 6; $b = 2; if ($b == 0) { throw new Exception("Exception発生"); } $i = $a / $b; echo $i; } catch (Exception $e) { echo $e->getMessage(); } |
課題
前回の課題のファイルに、以下のインターフェースが入っているファイル(Matcha.php)を追加した場合に、requireを追加してください。追加して、オブジェクトを生成するプログラミングを作成してください。
完成したソースファイルをすべてGitHubにpushしてプルリクエストしてください。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
<?php //インターフェイスファイルを読み込む require_once 'IDrip.php'; class Matcha implements IDrip { //プロパティ private $name = '抹茶'; //注ぐメソッドをオーバーライド public function drip(){ return $this->name; } //ミルクと一緒にそそぐメソッドをオーバーライド public function dripWithMilk(){ return $this->name . 'ミルク'; } } |
実行結果

ヒント
new Matcha()の追加
$dripper->dripDrink($matcha) の追加
※もともとある他のCDを参考にしましょう。
課題・復習用検索キーワード
| 検索例 |
| 🔍php 外部ファイル 読み込み |
| 🔍php インターフェースとは |
| 🔍php require include 違い |