非エンジニアでも知らないとヤバイPHP Part6〜データ型を理解しよう〜
コラム前回は自分で書いたPHPのプログラムをブラウザに表示させるところまで実行しました。今回は、プログラミングのデータ型について説明していきます。
「データ型」とは何か
それではさっそく「データ型」について紹介していきます。
プログラミングにおける「データ型」とは、扱うデータをいくつかの種類に分類して、各々について「名称」「特性」「範囲」「扱い方」「表記方法」「メモリ上での記録方法」などの、規約を定めたものです。扱うデータを分類することで、分類したデータを適切に管理したり、希望するデータを探しやすくなるメリットがあります。
例えば「電話番号の入力欄」に文字や小数点が入っていたら、適切な管理ができなくなるかと思います。11桁(+81から始まる場合はもう2桁増えます)の整数が入っている必要がありますね。この様な条件を指定するためにも、データ型は役に立ちます。
主なデータ型として、今回は以下の7つをご紹介いたします。
- 整数型(integer)
- 浮動小数点数型(float)
- 文字列型(string)
- 論理型(bool、boolean)
- 配列型(array)
- オブジェクト型(object)
- NULL型(null)
整数型(integer)とは
一番なじみやすいデータ型として、最初に整数型(integer)を紹介します。
整数型は「…、-4、-3、-2、-1、0、1、2、3、4、…」と「正の整数」「負の整数」「0」が該当します。
余談ですが、このinteger(整数)という単語…筆者は「高校数学で学習した積分のインテグラル(∮:integral)と発音が似てるな…」と感じていました。
調べてみたところ、いずれも語源は同じ様でして、ラテン語の integr-(完全な)から来ている様です。
浮動小数点数型(float)とは
「少数点以下の数を含む数」がこちらに該当します。
具体的には「1.3、20.67」などの小数点を含む数字が該当します。
ちなみに、PHPでは少数の取り扱いがあまり得意ではありません。というのも、少数に用意されている桁数に限りがあるためです。
例えば「0.333333…」の様な無限小数は管理しきれません。また、小数同士の計算を重ねていくと細かい誤差が出てきます。
桁数が決まっている少数の計算の場合、先に整数(例えば1,000倍にするなど)に変換して計算を行なってから、実際の小数に計算しなおす(計算の最後に1/1,000にする)などの工夫が必要です。
文字列型(string)とは
「文字、または文字が連結されたもの」をさします。文字列型を使う場合「'
(シングルクォート)」または「"
(ダブルクォート)」で囲います。
以前Part4でご紹介した、"山田太郎"
"山田花子"
などが文字列にあたります。ちなみに、整数型や不動小数点数型も「'
」や「"
」で囲うと文字列型になります。
論理型(bool、boolean)とは
型としては最も選択肢の少ない簡単な型ともいえます。論理型は真偽の値を表します。つまり「true(真)」または「false(偽)」のどちらかになります。
この論理型はプログラミングにおいて重要な「条件分岐」においてよく使われます。「ある条件が当てはまるときはA、そうでない場合はB」と言ったものですね。
代表的なものでif文があります。「もし〜なら○○」というやつですね(この様な文章は普段の会話ではあまり使わないかもしれませんが…)。
例えば「(今日は)疲れたから、帰りの交通手段にタクシーを使おう」も条件分岐に当てはまります。
疲れた = true(疲れている) → タクシーを使う
疲れた = false(疲れていない)→タクシーを使わない(歩いて帰るなど)
の様な感じですね。
この論理演算子ですが、true・falseとファイル内にベタ打ちしても判定されますが、条件が合致しているか否かでも判定されます。
詳細は別の機会に紹介しますが、以下に例をご案内いたします。
$haveMoney = 160;
if($haveMoney >= 140){
echo "ペットボトルの飲み物が買えます!";
}
この場合、$haveMoneyに160が代入されています。$haveMoney >= 140はtrue(160>=140なので正しい)です。したがって、if($haveMoney >= 140)の部分はif(true)と同じ意味になります。
上記のif文は()内の条件がtrueの時に{}内の処理を実行しますので、”ペットボトルの飲み物が買えます!”が呼び出されます。
boolに変換する場合、trueとfalseは以下の条件となります。
【false(条件が少ないのでこちらから記載します)】
- booleanのfalse
- 数値(integer)の0
- 浮動小数点数(float)の0.0、-0.0
- 文字列(string)の”0″
- 文字列(string)の空文字列の””
- 配列型の要素の数が0のもの
(配列型は後述しますが、複数の値をまとめて格納できます) - NULL
(NULLは後述しますが、変数が値を持たない状態です) - 属性がない空要素から作成されたSimpleXMLオブジェクト
(こちら詳細は今回割愛いたします)
【true】
- 上記以外の全て(負の数字、NAN(Not a Number)も含みます)
配列型(array)とは
配列型は複数の値をまとめて格納できる型となります。配列はarray()や[](ブラケット:角括弧)で表現されます。
基本的に変数を宣言した場合、格納される値は1つになります。一方配列型の場合、複数の値をまとめて1つの値として格納が可能となります。
具体的には下記の通りになります。
//①変数の基本形(リテラル型)
$member1 = "値1";
$member2 = "値2";
$member3 = "値3";
//②変数の配列型
$members = array("値1" , "値2" , "値3");
//$members = array(
// 0 => "値1" , //キーを0に指定
// 1 => "値2" , //キーを1に指定
// 2 => "値3" , //キーを2に指定
//);も同じ。
//$members = ["値1" , "値2" , "値3"];も同じ。[]で囲った場合、短縮公文になります。
//③配列型で作成した値の呼び出し
echo $members[0] // "値1"と表示される。
echo $members[1] // "値2"と表示される。
echo $members[2] // "値3"と表示される。
上記の通り、通常変数を定義する場合、変数の数だけ変数を宣言する必要があります①。一方、配列型を用いると、複数の値を1つの変数に格納できます②。そして配列型で作成した値を呼び出すには、配列のどこに格納されているかを指定する必要があります③。
ちなみにarray()および[]の中身の順番(index)に関してですが、特にキー(値に紐づいた名前)を指定しなかった場合、indexは0からスタートします。
配列に関しては他にも「連想配列」や「多次元配列」など、実践的な使い方が数多く存在します。今回は初歩的な部分の紹介に留め、詳しいことは次のブログ記事で解説いたします。
オブジェクト型(object)とは
オブジェクト型はデータ構造(プロパティ)と処理系(メソッド:関数)がまとまった型となります。このオブジェクト型を用いることで、機能毎のまとまりができるため、保守性・柔軟性・可読性などが向上します。
このオブジェクト型を理解するには、先に「関数」についても理解する必要があります。関数のご紹介はまた他の記事で実施し、今回はオブジェクトの大枠をざっくりとご紹介をいたします。
オブジェクト型を使用するには、いくつかの手順を踏む必要があります。
- 最初に「クラス(class)」を定義する
- 定義したクラス内に、必要なプロパティ(クラス内の変数)とメソッド(クラス内の関数)を定義する
- 定義したクラスを基に、オブジェクトを生成する(インスタンスの生成)
- オブジェクトを生成した後に、クラスで定義したプロパティやメソッドを呼び出す
この様な手順となります。具体例は以下の通りとなります。
<?php
//最初にクラスを定義する
class Human{
//プロパティの定義(実際の名前は後で設定するため、一旦値は空です)
public $name;
//メソッドの定義(メソッド内でプロパティを$this->nameを使って呼び出しています)
public function greet()
{
echo "こんにちは。私の名前は『" . $this->name . "』です!";
}
} //ここまでがクラスの定義
//クラスからインスタンスを生成する。
$ yamada = new Human();
//インスタンスの$nameプロパティに名前を設定する。
$ yamada->name = "山田 太郎";
//インスタンスのgreet()メソッドを呼び出す。
$ yamada->greet(); // ==> こんにちは。私の名前は『山田 太郎』です!
今回はHumanクラスを作成し、プロパティ(変数)に$name、メソッド(関数)にgreet()を用意しました。
急に難しくなりましたね…順を追って説明します。
class Human{
ここではclassを定義しています。
public
「アクセス修飾子」と呼ばれるものです。どこからプロパティやメソッドにアクセスできるかを表します。public,protected,privateなどがあります。今回は、外部からアクセスできるpublicを使用しています。外部からアクセスできないようにするにはprotectedやprivateを用います。
$name
プロパティ(クラス内の変数)です。必要に応じて後から変更できるよう、初期値は設定せず、変数宣言のみ実行しています。後で出てくる$yamada ->name = “山田 太郎”で、インスタンス化(後述参照)された$nameに値を設定しています。
public function greet(){...}
メソッド(クラス内の関数)です。ここでは「こんにちは。私の名前は『〇〇』です!」とechoされるメソッドを用意しました。
$this->name
擬似変数$thisからnameプロパティにアクセスしています。
.(ドット)
結合演算子です。.(ドット)の左側と右側を結合します。
ここまででクラスの定義が完了しています。
$yamada = new Human();
インスタンスを生成しています。
実はクラスというものは、定義するだけでは使用できません。
今回のように、$yamadaに対しnew演算子を用いてHumanクラスをインスタンス化した様に、インスタンスを生成する必要があります。
$yamada->name = "山田 太郎";
生成したインスタンスのnameプロパティに”山田 太郎”を代入しています。
$yamada->greet();
生成したインスタンスからメソッドを呼び出しています。事前に$yamada->name = "山田 太郎";
でnameプロパティに”山田 太郎”を代入したので、メソッドを呼び出した際は$this->name;
に”山田 太郎”が代入されます。したがって、メソッドが呼び出された際は
「こんにちは。私の名前は『山田 太郎』です!」
と表示されます。
大まかではありますが、オブジェクト型はデータ構造と処理系がまとまった型であることのご紹介をいたしました。
NULL型(null)とは
NULL型は「変数が値を持たない状態」を表す特殊な型です。具体的には以下の3つの状態が該当します。
- 定数のNULLが代入されている。
- 変数に値が代入されていない。
- 変数がunset()されている。
順を追って説明します。
「定数のNULLが代入されている」とは、変数に定数のNULLを代入している状態です。
次の「変数に値が代入されていない」とは、変数の宣言は行っているものの値が代入されていない状態を指します。
最後の「変数がunset()されている」とは、変数宣言を行い値を代入した後に、変数の割り当てを削除した状態です。各々以下の通りとなります。
<?php
$value1 = NULL; //定数NULLを代入しています
$value2 = ; //変数に値が代入されていません
$value3 = 3; //変数に3を代入しています
echo $value1; //何も出力されません
echo $value2; //何も出力されません
echo $value3; //3
unset($value3); //変数をunset()関数で$value3の変数の割り当てを削除しました
echo $value3; //今度は何も出力されません
この様に、変数が値を持たない状態がNULL型に該当いたします。
まとめ
いかがでしたでしょうか。
今回はPHPでの型について紹介いたしました。
次回はPHPでの配列について、より詳しく紹介していきます。
非エンジニアでも知らないとヤバイ Part7〜配列の紹介〜に移動する。
最後に
プログラミングを独学で行うと挫折することがしばしばあります。プログラミングを学んでみたい方、短期間でプログラミングを身につけたい方は64時間で”なりたい”を叶えるプログラミングスクール「WISH」にお気軽にお問い合わせください。現在無料カウンセリングや、入会金無料キャンペーン、さらに受講料20%オフのキャンペーンを開催しております。
株式会社Knocknote代表取締役。大学卒業後不動産営業に従事した後、ITの重要性を強く感じエンジニアへ転職。ソーシャルゲーム開発、スマホアプリやPepperアプリの企画及び開発、高校でのプログラミング講師などの業務に携わる。2017年1月に創業。現在はプログラミング教育事業、システム開発事業を展開。今後は海外向けの教育事業をさらに拡大させていく事が目標。著書:『作って学べるUnity超入門』(技術評論者)