Lesson 7

変数の型②

Lesson 7 Chapter 1
浮動小数点型

Lesson7でもLesson6に引き続き、型について学習していきます。

浮動小数点型とは

これまでの型に比べ使用頻度はそこまで高くありません。とはいえ、小数点を用いるような値を扱う際に使用する場合もあるので、浮動小数点型を学んでいきましょう。又、浮動小数点型はfloatやdoubleと表現されますが、現在はfloatで統一されていることがほとんどです。

float型の特徴

  • 小数点を用いる値に使用するケースがある。
  • 使用できる桁数に限度がある。
  • 出力される値は近似値(真の値ではないが、それに近い値)。
    (例)1.2 = 1.1999999...

浮動小数点型の定義

浮動小数点型の定義は整数型と同じようにクォーテーションを使用する必要はありません。小数点を用いることで浮動小数点型の定義が可能となります。それでは実際にコードを記述していくので新たに、下記の構成でindex.phpを作成しVScodeで開きましょう。

XAMPP > htdocs > Lesson7-1 > index.php

index.php
<?php
$value = 1.5;

浮動小数点型の確認

それでは先ほど定義した変数が浮動小数点型であるか確認してみましょう。

index.php
<?php
$value = 1.5;

var_dump($value);
出力結果
float(1.5)

floatと表示されているので浮動小数点型であることと同時に値が1.5ということが確認できました。

浮動小数点型へのキャスト

文字列型から浮動小数点型へキャストして見ましょう。まずは文字列型で定義しておきます。

index.php
<?php
$value = "1.5";

var_dump($value);
出力結果
string(3) "1.5"

文字列型である確認ができました。続いて浮動小数点型へキャストします。浮動小数点型は(float)を使用することでキャストすることができます。

index.php
<?php
$value = "1.5";

var_dump((float)$value);
出力結果
float(1.5)

まとめ

浮動小数点型のまとめ

  • (float)を変数の前に記述することで浮動小数点型に変換することができる。
  • 浮動小数点型は小数点を用いる値を指す。

Lesson 7 Chapter 2
オブジェクト型

オブジェクト型とは

オブジェクト指向とは概念として基本的な部分となってきます。そしてオブジェクト型とは処理と値をまとめたものになります。又、オブジェクト型はobjectと表現する事も多々あるので、その認識も今後持っておけると良いでしょう。

object型の特徴

  • 操作する処理と値をまとめたもの。
  • オブジェクト指向という概念に基づいている。

オブジェクト型の定義

それでは実際にコードを記述していくので新たに、下記の構成でindex.phpを作成しVScodeで開きます。オブジェクト型からは処理と値を利用する関係で、クラスというものを使用していますが、後ほどの講座で学習していくので今はイメージだけで構いません。

XAMPP > htdocs > Lesson7-2 > index.php

index.php
class TestClass{
  // 値(プロパティ)
  public $message = "これはテストです。";

  // 処理(メソッド)
  function Message() {
    echo $this->message;
  }

}

イメージとしてはクラスの中に処理と値が存在しており、これがオブジェクト型と呼ばれるものになります。

class TestClass

  • クラスとは処理(メソッド)と値(プロパティ)をまとめたもの。
  • クラスの定義はclassから始める。
  • TestClassの部分は任意ですが、連想しやすい命名にすると良い。
  • $message ・・・ 値(プロパティ)。
  • Message() ・・・ 処理(メソッド)。

public $message

  • クラスの中で定義された値のことをプロパティと呼ぶ。
  • $messageの部分は任意ですが、連想しやすい命名にすると良い。
  • クラスの中で定義したプロパティを使用する際は$this->messageと呼び出す必要がある。
  • publicの他にprivateとprotectedが存在し、アクセスできる範囲が変化する。publicはどこからでもアクセスが可能。

function Message()

  • クラスの中で定義された処理のことをメソッドと呼ぶ。
  • Message()の部分は任意ですが、連想しやすい命名にすると良い。
  • Messageメソッドは「これはテストです。」というメッセージを出力するメソッド。

オブジェクト型の確認

それではオブジェクト型であるかどうか確認してみましょう。2行追加しました。

class TestClass{
  // 値(プロパティ)
  public $message = "これはテストです。";

  // 処理(メソッド)
  function Message() {
    echo $this->message;
  }

}

// 追加
$object = new TestClass();

// 追加
var_dump($object);

new TestClass()

  • 定義したクラスを使用する際はnew クラス名をルールとし、これをオブジェクトの生成と呼ぶ。
  • 変数$objectにはTestClassが代入されており、TestClassはプロパティとメソッドがまとめられたもの、つまりオブジェクト型である。

上記でもあるように、クラスを使用するには「インスタンスの作成」を行う必要があり「new クラス名」としています。こちらもこの後の講座で学習していくため、現状はイメージだけで構いません。

出力結果
object(TestClass)#1 (1) { ["message"]=> string(27) "これはテストです。" }

object(TestClass)に注目してみると、オブジェクト型であることが確認できました。

まとめ

object型とはオブジェクト指向という概念からきているものであり、オブジェクト指向を一言で表すと役割ごとにまとめておきましょう。と言う考え方です。A,B,Cの3つを合わせてDとするより、A,B,Cを1つずつに分けておくと機能の修正や追加を行いやすく、チームでの開発が行いやすいというメリットがあります。

object型のまとめ

  • object型とは処理と値をまとめたもの。

Lesson 7 Chapter 3
callable型

callable型とは

callable型とは、ある処理を実行し別の処理を実行させることからコールバックと呼ばれています。

callable型の特徴

  • Aの処理をBの処理から呼び出す為、callable(コールバック)と呼ばれる。
  • 引数に関数を指定し、処理を呼び出す。
  • 汎用性が高まる。

引数とは

今回から引数(ひきすう)にも触れていきます。引数とは関数やメソッドに渡す情報の部分を指します。今後の学習で、関数やメソッドについて学習していきますので、今はイメージだけ持ちながら学習を進めていきましょう。

引数
関数(引数)

引数とは

関数の後ろに付く()の中に情報を入れてあげることでその情報を関数へを渡すことができる。

callable型の定義

それでは実際にコードを記述していくので新たに、下記の構成でindex.phpを作成しVScodeで開きましょう。

XAMPP > htdocs > Lesson7-3 > index.php

index.php
// 処理① $firstNameと$lastNameを結合する処理
function CallbackTest($firstName, $lastName)
{
  return $firstName . $lastName . "さん";
}

// 処理② CallbackTestへ情報を渡す処理
function Test($firstName, $lastName, $callback)
{
  return $callback($firstName, $lastName);
}

$fullName = 'Test'('テスト', '太郎', 'CallbackTest');

var_dump($fullName);

それでは解説していきます。

function CallbackTest($firstName, $lastName)

  • CallbackTestは関数。命名は任意だが連想しやすいものが良い。
  • CallbakTest関数は、$firstNameと$lastNameを結合する処理が行われている。
  • 関数の()の中に記述されている$firstNameと$lastNameは引数(ひきすう)と呼ぶ。
  • 現段階では$firstNameと$lastNameの中身は空の状態。

function Test($firstName, $lastName, $callback)

  • Testは関数。命名は任意だが連想しやすいものが良い。
  • Test関数はCallbakTest関数を実行させるための処理が定義されている。
  • 関数の()の中に記述されている$firstName, $lastName, $callbackの3つを引数(ひきすう)と呼ぶ。
  • 現段階で$firstName, $lastName, $callbackの3つは空の状態。

'Test'('テスト', '太郎', 'CallbackTest');

  • callable型。
  • Test関数に対して「テスト」「太郎」「CallbackTest」3つの情報を送っている。

定義したcallable型の流れを確認

上記の情報をもとに流れを辿ってみましょう。

index.php
// Aの処理
function CallbackTest($firstName, $lastName)
{
  return $firstName . $lastName . "さん";
}

// Bの処理
function Test($firstName, $lastName, $callback)
{
  return $callback($firstName, $lastName);
}

$fullName = 'Test'('テスト', '太郎', 'CallbackTest');

var_dump($fullName);

①$fullName = 'Test'('テスト', '太郎', 'CallbackTest')が実行される。

②Bの関数であるTest関数へ「テスト」「太郎」「CallbackTest」3つの情報を渡す。

③Test関数は受け取った情報を左から引数に代入していく。
$firstName = 'テスト'、
$lastName = '太郎'、
$callback = CallbackTest

④Test関数の処理が実行される。③の引数を当てはめていくとCallbackTest('テスト', '太郎')となる

⑤CallbackTest('テスト', '太郎')は①と同様でAの処理であるCallbackTestへ情報を送る

⑥CallbackTest関数は受け取った情報を左から引数に代入していく。
$firstName = 'テスト'、
$lastName = '太郎'

⑦CallbackTest関数の処理が実行される。引数を当てはめていくと'テスト' . '太郎' . 'さん'となる

callable型の確認

index.php
// Aの処理
function CallbackTest($firstName, $lastName)
{
  return $firstName . $lastName . "さん";
}

// Bの処理
function Test($firstName, $lastName, $callback)
{
  return $callback($firstName, $lastName);
}

$fullName = 'Test'('テスト', '太郎', 'CallbackTest');

var_dump($fullName);
出力結果
string(21) "テスト太郎さん"

これまでと違い、結果がcallableではなくstringと表示されました。こちらは実行した処理の結果が「string型です」と出力されている状態になります。

is_callable関数

callable型かどうかを厳密に判定したい場合、is_callableという関数が用意されているので、こちらを使用して見ましょう。

is_callable()
is_callable(確認したい関数名)

is_callableの引数に確認したい関数の名前を入れてあげることで、その関数がcallableかどうかの確認ができます。尚、返り値はtrueかfalseのbool型となります。

index.php
function CallbackTest($firstName, $lastName)
{
  return $firstName . $lastName . "さん";
}

function Test($firstName, $lastName, $callback)
{
  return $callback($firstName, $lastName);
}

$fullName = 'Test'('テスト', '太郎', 'CallbackTest');

var_dump(is_callable('Test'));
出力結果
bool(true)

trueと結果が出ましたので、callable型ということがわかりました。callable型でなければfalseと出力されます。

まとめ

このように関数Testの引数に関数CallbackTestを渡し、Testの処理でCallbackTestの処理を実行している為コールバック(callable)と呼ばれています。あくまでこちらは関数を実行する方法の一つということを覚えておきましょう。

引数の扱いについて

送る引数の数と受け取っている引数の数に相違があるとうまく動作しなかったり、エラーが発生したりするので注意しましょう。

callable型のまとめ

  • callableとはBの処理からAの処理を呼び出す。
  • 引数に関数を指定し、処理を呼び出す。

Lesson 7 Chapter 4
iterable型

iterable型とは

以前学習したarray型の擬似型になります。iterable型とは値がforeach文の実行可能である型のことを指します。

iterable型の特徴

  • foreach文が実行可能であること。

foreach文とは

今後の学習で登場しますが、foreach文とは繰り返し処理(ループ処理)の一つとして存在します。

foreach構文
foreach($values as $value){
// 処理
}

現段階では大まかなイメージだけで構いません。foreach文とは配列の値の数だけ同じ処理を繰り返し実行する処理のことを指します。

iterable型の定義

それでは実際にコードを記述していくので新たに、下記の構成でindex.phpを作成しVScodeで開きましょう。

XAMPP > htdocs > Lesson7-4 > index.php

index.php
<?php
function IterableTest($values)
{

  foreach ($values as $value) {
    echo $value . "<br>";
  }
}

$values = ["りんご", "バナナ", "みかん"];

IterableTest($values);

解説をしていきます。

IterableTest($values)

  • IterableTest関数。内部では繰り返し処理が実施されている。
  • 最下行のIterableTest($values)が実行されるまでは、引数$valuesは空の状態。

foreach ($values as $value)

  • 繰り返し処理の一つ。
  • 複数の値を保持している$valuesを$valueという単数の変数に変えて一つずつ内部でechoしている。

IterableTest($values);

  • IterableTest関数に$valuesを渡している。

iterable型の確認

それではブラウザに結果を出力してみます。

index.php
<?php
function IterableTest($values)
{

  foreach ($values as $value) {
    echo $value . "<br>";
  }
}

$values = ["りんご", "バナナ", "みかん"];

IterableTest($values);
出力結果
りんご
バナナ
みかん

処理が問題なく実行されていることが確認できました。続いてこちらがiterable型であるかどうか、チェックしていきます。

is_iterable関数

iterable型かどうかを厳密に判定したい場合、is_iterableという関数が用意されているので、こちらを使用して見ましょう。

is_iterable()
is_iterable(確認したい値)

is_iterableの引数に確認したい関数の名前を入れてあげることで、その関数がiterableかどうかの確認ができます。尚、返り値はtrueかfalseのbool型となります。

index.php
<?php
function IterableTest($values)
{

  var_dump(is_iterable($values));

}

$values = ["りんご", "バナナ", "みかん"];
IterableTest($values);
出力結果
bool(true)

trueと結果が出ましたので、iterable型ということがわかりました。iterable型でなければfalseと出力されます。

iterable型ではない場合

iterable型ではないパターンも確認してみましょう。先ほどはIterableTestへ「りんご」「バナナ」「みかん」と3つの情報を送っていましたが、りんご単一の値にしてみます。

index.php
function IterableTest($iterable)
{

  var_dump(is_iterable($iterable));
}
$values = "りんご";
IterableTest($values);
出力結果
bool(false)

falseが返ってきたのでiterableではないということがわかりました。

まとめ

iterable型のまとめ

  • iterable型とは繰り返し処理(foreach)が実行可能であること。
  • is_iterable関数を使用することでiterable型かどうかの判定ができる。返り値はtrueかfalseのbool型。

Lesson 7 Chapter 5
リソース型

リソース型とは

リソース型とはデータベースやファイルなど外部情報を扱う特殊な型のことを指します。又、リソース型はresourse型と表現します。

resource型の特徴

  • ファイルやURLなど特殊な値を保持するもの

リソース型の定義

それでは実際にコードを記述していくので新たに、下記の構成でindex.phpを作成しVScodeで開きましょう。

XAMPP > htdocs > Lesson4-9 > index.php

index.php
<?php
$googleUrl = fopen('https://www.google.com/','r');
$phpFile = fopen('index.php','r');

var_dump(get_resource_type($googleUrl));
echo '<br>';
var_dump(get_resource_type($phpFile));

それでは解説をしていきます。

fopen('https://www.google.com/','r')
fopen('index.php','r');

  • fopen関数はファイルやURLなどの情報を表示する際に使用する関数。
  • fopen('URL', 'オプション')。rは読み込みのみ。他にも書き込みを可能とするオプションなども存在する。
  • 変数$googleUrlにはgoogleのURLを代入し、変数$phpFileには現在使用しているindex.phpファイルを代入。

get_resource_type($googleUrl)
get_resource_type($htmlFile)

  • get_resource_type関数はresource型であるかどうかのチェックをする関数。
  • resource型であればresourceの種類を確認することができる。

リソース型の確認

ブラウザの結果を確認してみましょう。

index.php
<?php
$googleUrl = fopen('https://www.google.com/','r');
$phpFile = fopen('index.php','r');

var_dump(get_resource_type($googleUrl));
echo '<br>';
var_dump(get_resource_type($phpFile));
出力結果
string(6) "stream"
string(6) "stream"

いずれも存在しているURLとファイルの情報だった為、結果trueとなりresourceの種類が表示されました。

存在しない外部ファイルの場合

では実際に存在しないものを代入した場合どうなるのか、確認してみましょう。$phpFileの中身を変更します。

index.php
<?php
$phpFile = fopen('test.php','r');

var_dump(get_resource_type($phpFile));
出力結果
Warning: fopen(test.php): Failed to open stream: No such file or directory in ...

こちらは存在しないファイルを参照している為に起きているエラーです。以上が存在しないものを指定した場合の結果となります。

まとめ

resource型のまとめ

  • resource型とはファイルやURLなど外部の情報を扱う特殊な型のことを指す。
  • get_resource_type()関数を使用することで対象がresource型かどうかチェックを行うことができる。

Lesson 7 Chapter 6
ヌル型

ヌル型とは

ヌル型とは値が存在しない状態のことを指します。nullと表現します。実際のシステムでは「値がnullであれば処理を実行しない」など状況によって処理の分岐点になることが多くあります。

null型の特徴

  • 値が存在しない状態のこと

ヌル型の定義

それでは実際にコードを記述していくので新たに、下記の構成でindex.phpを作成しVScodeで開きましょう。今回はnullになる3つのパターンを用意しました。

XAMPP > htdocs > Lesson7-6 > index.php

index.php
// ①変数の定義がされていない時
var_dump(is_null($nullTest1));

// ②nullが代入されている時
$nullTest2 = null;
var_dump(is_null($nullTest2));

// ③unsetされている時
$nullTest3 = "test";
unset($nullTest3);

var_dump(is_null($nullTest3));

ヌル型の確認

is_null関数

値がヌル型でどうか確認する為にis_null関数が存在します。値が存在しない場合はヌル型と判定されtrue、存在していればfalseが返ります。

is_null
is_null(確認したい値)

それではブラウザの結果と同時に解説をしていきます。

nullになるパターン1

index.php
<?php
// ①変数の定義がされていない時
var_dump(is_null($nullTest1));
出力結果
Warning: Undefined variable $nullTest1 in ...
bool(true)

①変数の定義がされていない時

$nullTest1は定義されていないので「見つかりません」とエラーが出ていますが、今回は気にしないでください。

注目していただきたい部分は2行目の「bool(true)」になります。is_null関数はnullであればtrueを返す関数なので返り値はbool型、$nullTest1がtrueが返ってきているのでnullということがわかりました。

nullになるパターン2

index.php
<?php
// ②nullが代入されている時
$nullTest2 = null;
var_dump(is_null($nullTest2));
出力結果
bool(true)

②nullが代入されている時

$nullTest2にはnullを代入しているので、結果は「bool(true)」となりました。又、今回は$nullTest2を定義していたのでエラーは未検出となります。

nullになるパターン3

index.php
<?php
// ③unsetされている時
$nullTest3 = "test";
unset($nullTest3);

var_dump(is_null($nullTest3));
出力結果
Warning: Undefined variable $nullTest3 in ...
bool(true)

③unsetされている時

$nullTest3に文字列「test」を代入しているので、1行目の段階ではnullではありません。しかし、2行目で行われているunset関数により定義された変数が未定義の状態となり、nullとなりました。

変数が未定義なのでパターン1と同じエラーが出ていますが2行目ではbool(true)と表示されているので、値がnullであることが確認できます。

以上、nullである3パターンをご紹介しました。

まとめ

NULL型のまとめ

  • null型とは変数やその中身が存在しない状態のことを言う。
  • is_null関数を使用することでnullかどうかの判定ができる。nullであればTRUE、何かしらが存在すればFALSEとなる。
  • unset関数を使用することで値を未定義の状態にすることができる。