PHPのこと

【PHP】別のphpファイルにある関数を呼び出すには

PHP

たとえばファイルを読み込んで配列に格納するような関数を別のPHPファイルに記述しておいて、メインとなるPHPファイルやHTMLファイルにはその関数を呼び出して使うコードだけ記載できたら関数を記述したPHPファイルは使いまわしができる。いちいち複数のPHPファイルで同じ関数を書かなくてもいいし、メンテナンスも楽だよね…。そんな思いに突き動かされて探し出しました。

関数は「function [関数名]([引数]) 」で!

たとえばファイルを読み込む関数の名前を「file_read」として、呼び出す側からはファイル名(拡張子付き)を指定してfile_read関数を呼び出す。そうすれば呼び出すファイルが違っていてもfile_read関数の中身は変えなくていいハズ。

▽呼び出す側のHTMLファイル

<!DOCTYPE html>
<html lang="ja">
<head>
<title>テスト</title>
</head>
 <body> 
/***
 ここからPHP↓
***/
  <?php
   include_once('./get_csv().php');
   $file = get_csv('./test.csv');
   ver_dump($file);
  ?>
/***
 PHPはここまで↑
***/
 </body>
</html>

▽関数の書いてあるphpファイル(get_csv().php)
指定のファイルを読み込んで、読み込んだ内容を返す

<?php
function get_file_record($filename) 
{
  $file = new SplFileObject($filename);
 return $file;
}
?>

解説

   include_once('./get_file_record().php');
   $file = get_file_record('./test.csv');
   ver_dump($file);

1行目:include_onceでファイルを読み込む関数が書いてあるphpファイルをインクルード宣言する。関数が書いてあるファイルのファイル名は関数名にしておくと自分が把握しやすい。
例)get_file_record関数の書いてあるファイル名は「get_file_record().php」
2行目:実際にファイルを読み込む関数を呼び出す。
3行目:ブラウザに表示

function get_file_record($filename) 
{
  $file = new SplFileObject($filename);
 return $file;
}

1行目:関数名が「get_file_record」であることの宣言。引数にはファイル名を持つ。
3行目:SplFileObjectクラスを使ってファイルからデータを読み込み、$file変数に格納する
4行目:読み込んだデータを返す
※戻り値がないなら4行目はいらない。

SplFileObjectクラスとは

SplFileObject クラスはファイルのためのオブジェクト指向のインターフェイスを提供します。byPHPマニュアル

つまり、このクラスを使えば任意のファイルの中身を任意の取得方法で取得できるということ。上記のコードでいうと↓の部分

$file = new SplFileObject($filename);

この1文あとに、setFlagsを使って定数を付与することでファイルの中身をどう読むか、が指定できる。具体的にはこう▽

$file = new SplFileObject($filename);
/** CSVファイルに切り替える **/
$file->setFlags(SplFileObject::READ_CSV);
/** CSVファイルを空行を飛ばして1行にまとめて読み込みたい **/
$file->setFlags(SplFileObject::READ_CSV | SplFileObject::READ_AHEAD | SplFileObject::SKIP_EMPTY | SplFileObject::DROP_NEW_LINE); //定義済み定数は複数

指定できる定義済み定数の意味▽

  1. SplFileObject::DROP_NEW_LINE
    行末の改行を読み飛ばす。
  2. SplFileObject::READ_AHEAD
    先読み/巻き戻しで読みだす
  3. SplFileObject::SKIP_EMPTY
    ファイルの空行を読み飛ばす。(※READ_AHEADと合わせて使用すること)
  4. SplFileObject::READ_CSV
    CSV列として行を読み込む

おすすめ