初めてのPHP ②。functionとclassを使ってみよう

初めてのPHP ②。functionとclassを使ってみよう
この記事はこんな悩みを解決します
  • PHPの関数を使ってみたい
  • Classの使い方が知りたい
  • PHPを勉強したい

データを扱う上でfunctionとclassという機能があります。この機能を使うことで何度も同じ処理を書かなくても済むようになり、効率よく開発できます。

この記事を読むことでfunctionとclassの使い方が分かります。

初めてのPHP ②。functionとclassを使ってみよう

functionとclassを使いこなすことで複雑な処理も分かりやすく書くことができます。フレームワークなどを使うときにも必須の知識となります。

まずはfunctionの使い方から紹介します。

functionの使い方

functionとはhtmlspecialchars やvar_dumpなどのようにデータを処理してくれる関数のことを言います。

では、htmlspecialcharsやvar_dumpがどのように処理されるか見て行きましょう。

<?php
	$greet = "hello";

	echo "<a>$greet</a>".", ";

	echo htmlspecialchars("<a>$greet</a>".", ");
	
	var_dump($greet);
?>

ブラウザで確認して行きます。

echoの場合はaタグが無視されて表示されていますが、htmlspecialcharsを使うことでaタグも表示されています。さらに、var_dumpを使うことでデータ型や文字列が確認できるようになっています。

これはhtmlspecialcharsやvar_dumpが最初からPHPで定義されているからです。こうした関数を下記のように自分で作ることもできます。

自分で関数を定義してみよう

<?php
	$greets = [
		"Hi",
		"Hello",
		"Good morning"
	];

	var_dump($greets);

	function dd($data){
		echo "<pre>";
		die(var_dump($data));
		echo "</pre>";
	}
	dd($greets);

	echo "aaa";
?>

functionでddという関数を定義しています。
ddの中のdieという関数でその後の処理を無視するように設定しています。また、<pre>で囲うことで配列の中の要素を見やすくしています。

ブラウザで確認してみましょう。

予想通りですね。var_dumpで表示されているものよりもddで表示されているものの方が見やすいと思います。このddという関数はPHPで広く使われているので作っておくと便利です。

こうした関数をindex.phpに書いてもいいですが、function用のファイルを作ってそこから呼び出すようにした方が便利に使えます。

functionをまとめたファイルを作ろう

functions.phpを作ってそこから呼び出すようにして見ましょう。

<?php

function dd($data){
	echo "<pre>";
	die(var_dump($data));
	echo "</pre>";
}

index.phpではrequireを使ってfunctions.phpを呼び出すように書いてあげます

<?php

	require 'functions.php';

	$greets = [
		"Hi",
		"Hello",
		"Good morning"
	];

	var_dump($greets);
	
	dd($greets);
?>

requireでfunctions.phpを呼び出しています。これでddを定義していなくても自動でfunctions.phpの中を探して関数を使ってくれます。

ブラウザを確認しても変化ないことが分かります。

classの使い方

上記のような関数はオブジェクトを作り、そのオブジェクトの中で使うという方法が用いられます。

オブジェクトが何か分かりにくいですが、テンプレートみたいなものとして捉えると良いでしょう。オブジェクトに当てはめて処理することで効率よく情報を処理できます。

では、例を見て行きましょう。

<?php

class MyName{
	public $name;

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

MyNameというクラスを作り$nameプロパティを定義しています。
また、NameSetという関数を作り$nameプロパティを変更できるようにしています。

では、index.phpでMyNameを使ってみましょう。

<?php
 require 'functions.php';

	$name = new MyName();
	$name->NameSet("naka");
	echo $name->name;

$nameにMyNameクラスをオブジェクト化しています。これで$nameからMyNameの関数を使えるようになります。さらに、NameSetで名前を設定し、echoでその名前を呼び出しています。

ブラウザで確認して見ましょう。

予想通り設定した名前が表示されています。

アクセス修飾子を定義しよう

ちなみに今回はpublicで$nameを定義しましたが、protectedやprivateでアクセスを制限することもできます。

アクセス設定の違い
  • public;どこからでもアクセス可能です
  • protected;クラス自身と継承クラスからアクセス可能です。
  • private;同じクラスの中でのみアクセス可能です。

例えば、下記のように設定してみましょう。

class MyName{
	private $name;

	function NameSet($name){
		$this->name = $name;
	}
	function NameGet($name){
		echo $this->name;
	}
}

$nameをprivateにしたことで直接nameプロパティにアクセスできなくなりました。そのため、nameプロパティを取り出すためにNameGetを定義しました。

index.phpには下記のように記入します。

<?php

	require 'functions.php';

	$name = new MyName();
	$name->NameSet("naka");
	$name->NameGet();

NameGetで名前を呼び出しています。
ブラウザで確認してもさっきと変わらないことが分かります。

staticメソッドを使おう

ちなみに、オブジェクト化しなくても関数を呼び出せる方法もあります。

class MyName{

	public static function NameGet($name){
		return $name;
	}
}

functionをstaticメソッドとして定義することでオブジェクト化しなくてもNameGet関数が使えるようになります。

呼び出し方は下記のようになります。

<?php

	require 'functions.php';

	echo MyName::NameGet("naka");

クラス名 :: 関数名で関数が呼び出せます。
ブラウザで確認しても変化がないことが分かります。

constructを使おう

他にもよく使うものとしてコンストラクタがあります。これによりオブジェクト化するだけで関数を呼び出すことができます。

class MyName{
	function __construct($name){
		echo $name;
	}
}

__constructの中身はオブジェクト化すると自動で動きます。

では、index.phpで呼び出してみましょう。

<?php

	require 'functions.php';

	$name = new MyName("naka");

ブラウザで確認しても変化がないことが分かります。

まとめ

今回はfunctionとclassの使い方を紹介しました。

これらはPHPを勉強していく上で基本中の基本となるので覚えておきましょう。オブジェクトを使って開発ができるといちいち関数の中身を考えなくても作業ができるので便利になります。

関連記事