プログラミングスクール【社会人におすすめオンライン学習】 > 

10日で使えるPHP | 未経験のサルでも分かるPHPの学習サイト

10日で使えるPHP | 未経験のサルでも分かるPHPの学習サイト

3日でPHPシステム開発

「10日で使えるPHP | 未経験のサルでも分かるPHPの学習サイト」は、現役コーダー(プログラマー)のために最速、最短でPHPを書けることを目的とした学習サイトだ。

業務システム開発に不要な要素をバッサリ切り捨て、必要なエッセンスに選択と集中している。

流し読みで全体像を捉えて、必要な箇所からつまみ食いすれば、3日でUI/DBまわりを十分書けるようになる。

非エンジニアでも10日でPHPが書ける

非エンジニア、文系未経験者、サルでも独学10日でPHPを使えるように内容を構成した。

不要な基礎はバッサリ切り捨て、必要な基礎を十分に深堀した。10日後にはデータベースを使用したWEBシステムを開発できるようになる。

プログラミングスクールでチンタラお勉強をしたつもりになっているアホを横目に、ブッチギリで10日でエンジニアの入り口に立ってほしい

10日で使えるPHP | 未経験のサルでも分かるPHPの学習サイト 10日で使えるPHP | 未経験のサルでも分かるPHPの学習サイト

文系未経験、サルでも10日でPHPを使えるように内容を構成した独学向け学習サイト。不要な基礎はバッサリ切り捨て必要な基礎を十分に深堀した・・・  続きを見る 

新卒や現役エンジニアの学習方法(オンライン学習 or 書籍) 新卒や現役エンジニアの学習方法(オンライン学習 or 書籍)

「SIerやメーカーに就職した新卒」や「現役エンジニア」で、動画配信で学ぶ技術者はほぼゼロと言ってよい。洗練された書籍で学んだほうが短期間で技術習得できるし高すぎる。・・・  続きを見る 

RUNTEQの就職先と就職できた卒業生インタビュー RUNTEQの就職先と就職できた卒業生インタビュー

RUNTEQの就職先と就職できた卒業生のインタビュー。

インタビュー対象の卒業生の学歴は不明2名、大学中退1名をを除き全員大卒、前職は派遣社員1名、新卒1名を除き、全員正規雇用の社員または公務員だ。・・・  続きを見る 

目次

  1. PHPとは?
  2. PHPの特徴
  3. PHPの書き方
    1. HTMLに直接PHPのコードを記述する
    2. Hello Worldを出力する
    3. HTMLの中でHello Worldを出力する
    4. 非推奨タグの記述方法(short_open_tag, asp_tags)
    5. PHPの文の区切り
    6. PHPで改行の出力する
    7. PHPでHTMLの改行を出力する
    8. nl2br()で\nを<br>に変換する
    9. PHPのコメント
    10. 命名規則(ネーミングコンベンション)
    11. ミニファイ(コードの圧縮)を行う場合のコメントは全て /* */ で記述する
    1. 整数(int, integer)
    2. 浮動小数点数(float, double, real)
    3. 論理型(bool, boolean)
    4. 文字列(string)
      1. ダブルクォーテーション内の変数の置き換え
    5. ヒアドキュメント(<<<)
    6. NULL型(null)
    7. 未定義値
    8. NAN(not a number)
    9. コールバック(callable)
    10. キャスト(型の相互変換)
  4. 関数 function
    1. 関数 function
    2. return
    3. 引数の参照渡し(リファレンス渡し)
    4. 引数のデフォルト値の設定
  5. クラス
    1. クラスのプロパティ、メソッドのスコープ
    2. インスタンスの生成
    3. クラスのプロパティ、メソッドのスコープ(アクセス修飾子)
    4. private プロパティ
  6. 例外処理
    1. try catch finally throw の仕様
    2. throw 意図的に例外を発生する
    3. try catch finally による例外処理
    4. 深い階層で発生したエラーの例外処理
  7. シンタックスハイライト
    1. highlight.js

PHP

関数 function

関数 function

同名の関数を定義した場合、パースエラーが発生する。

パースエラー(構文エラー)は、PHPがコードをパース(構文解釈)する段階で止まってしまうエラーで、多くの場合、間違った構文 ; の付け忘れ、{} () の閉じ忘れなどを記述して発生する。

パースエラーは致命的なエラーで、コンパイルエラーに相当する。パースエラーが発生した場合、プログラムの実行を停止する。

return

return はプログラムの制御を呼び出し元に戻す。 呼び出し側のモジュールでは、呼び出しの次の式から続行する。戻り値として値を設定できる。

function、method で return を呼び出した場合、function、method の処理を終了し、戻り値があれば戻り値を返す。

グローバルスコープで呼び出されると、現在実行中のスクリプトが終了する。

スクリプトが include もしくは require されたものである場合、制御は呼び出し元のファイルに戻る。return に戻り値が設定されている場合、include の戻り値となる 。

<?php
function add($a, $b) {
	$c = $a + $b;
	return $c;	/* 戻り値 $c を返し、function 終了 */
}

$rtn = add(1, 2);
echo $rtn;		/* 3 表示 */
?>
<?php
function who() {
	echo 'hogehoge';
	return;	/* functionを終了。戻り値は返さない。 */
}

$rtn = who();	/* hogehoge 表示 */
?>

引数の参照渡し(リファレンス渡し)

引数の参照渡し(リファレンス渡し)は、定義する関数の引数の前に & を 付加する。

以下の例では、function set_bono(&$var) の &$var は参照渡しの引数になる。

set_bono($name) で、set_bono(&$var) の &$var は $name の参照渡し(リファレンス渡し)となる。

$name は 'hogehoge' が代入されているが、set_bono 関数の $var = 'bonobono'; で $name の内容は 'bonobono' に書き換わる。

引数の参照渡し(リファレンス渡し)は、変数の参照(リファレンス)と同様の仕組みで、$name と $var は同じメモリ領域を指し示すようになる(エイリアス、別名)。詳しくは 変数の参照(リファレンス)を参照。

<?php
function set_bono(&$var) {
	$var = 'bonobono';
}

$name = 'hogehoge';
echo $name;	/* hogehoge 表示 */

set_bono($name);
echo $name;	/* bonobono 表示 */
?>

引数のデフォルト値の設定

関数は引数に、引数 = デフォルト値 の書式で、デフォルト値を設定できる。

デフォルト値は、呼び出し元のパラメーターに引数が指定されなかった場合に使われる。ただし、null を渡した場合はデフォルト値を代入しないので、注意が必要。

以下の例では、function set_bono($var = 'bonobono') の引数、$var に デフォルト値 'bonobono' を設定している。

<?php
function set_bono($var = 'bonobono') {
	return $var . 'はラッコ' ;
}

echo set_bono();		/* bonobonoはラッコ 表示 */
echo set_bono('hogehoge');	/* hogehogeはラッコ 表示 */
echo set_bono(null);		/* はラッコ 表示 */
?>

整数(int, integer)

整数(integer)は、10 進数(基数 10)、16 進数(基数 16)、8 進数(基数 8)あるいは 2 進数(基数 2)表記で指定可能。

正の値(+)負の値(-)を数値の前に付与可能。

<?php
$num = 1234;		// 10進整数
$num = -1234;		// 負の値
$num = 01234;		// 8進整数 (0で始まる数値は8進数とみなされる)
$num = 0xffff;		// 16進整数 (0xで始まる数値は16進数とみなされる)
$num = 0b11000100;	// 2進整数 (0bで始まる数値は2進数とみなされる)(PHP 5.4.0以降)
?>

浮動小数点数(float, double, real)

<?php
$num = 1.234;		/* 浮動小数点数 */
$num = 1.2e3;		/* 浮動小数点数(指数表記) 1.2 × 103 */
$num = 7E-10;		/* 浮動小数点数(指数表記) 7 × 10 - 10 */
$num = 123_456_789;	/* 数値リテラルセパレータ(PHP 7.4.0 以降) */
?>

論理型(bool, boolean)

true、false を指定する。小文字、大文字の区別はない。

<?php
$bool = true;
$bool = false;
$bool = TRUE;
$bool = True;
?>

一般的に、true は整数の 1、false は 整数の 0 として扱わる。
※VBなどの一部言語では true は -1 なので注意が必要。

Javaは boolean型と数値の互換性はない。よって、true は整数の 1、false は 整数の 0 としての扱いはない(コンパイルエラー)

true、false を整数として扱い比較するのは、バグの温床になりやすい。
比較は if ($a === true)、if ($a === false) のような厳密な比較を行うことが、可読性が高く望ましい。

<?php
echo (int)true;		/* 1 表示 */
echo (int)false;	/* 0 表示 */
echo intval(true);	/* 1 表示 */
echo intval(false);	/* 0 表示 */

echo (bool)0;		/* 表示されない */
echo (bool)'0';		/* 表示されない */
echo (bool)"0";		/* 表示されない */
echo (bool)1;		/* 1 表示 */
echo (bool)-1;		/* 1 表示 */
echo (bool)123;		/* 1 表示 */
echo (bool)'1';		/* 1 表示 */
echo (bool)"1";		/* 1 表示 */
?>

文字列(string)

文字列はシングルクオーテーション(')、ダブルクォーテーション(")で囲む。ダブルクォーテーションで囲まれた文字列の中ではエスケープシーケンスを使用できる(※シングルクオーテーションでは使用できない)。

<?php
$str = 'Hello';	/* Hello 表示 */
$str = "Hello";	/* Hello 表示 */
?>

シングルクオーテーションで囲まれた文字列の中で、文字としてシングルクオーテーションを使いたい場合は \' を、ダブルクォーテーションで囲まれた文字列の中で、文字としてシングルクオーテーションを使いたい場合は \" を使用する。

<?php
$str = 'Hello \'World\' ';	/* Hello 'World' 表示 */
$str = "Hello \"World\" ";	/* Hello "World" 表示 */
?>

シングルクオーテーションで囲まれた文字列の中でダブルクォーテーションを使用できる。また、ダブルクォーテーションで囲まれた文字列の中でシングルクオーテーションを使用できる。

<?php
$str = 'Hello "World" ';	/* Hello "World" 表示 */
$str = "Hello 'World' ";	/* Hello 'World' 表示 */
?>
ダブルクォーテーション内で使用できるエスケープシーケンス 一覧表
エスケープシーケンス機能
\"二重引用符
\nラインフィード (LF またはアスキーの 0x0A (10))
\rキャリッジリターン (CR またはアスキーの 0x0D (13))
\\バックスラッシュ
\t水平タブ (HT またはアスキーの 0x09 (9))
\v垂直タブ (VT またはアスキーの 0x0B (11))
\eエスケープ (ESC あるいはアスキーの 0x1B (27))
\fフォームフィード (FF またはアスキーの 0x0C (12))
\[0-7]{1,3}8進数: 正規表現 [0-7]{1,3} にマッチする文字シーケンスは、8 進数表記の 1 文字 (例:. "\101" === "A") です。 正規表現にマッチする文字シーケンスは、8 進数表記の 1 文字です。 1 バイトに収まらない部分は、何もメッセージを出さずにオーバーフローします (例: "\400" === "\000") 。
\x[0-9A-Fa-f]{1,2}16進数: 正規表現 [0-9A-Fa-f]{1,2} にマッチする文字シーケンスは、16 進数表記の 1 文字(例: "\x41" === "A")です。
\u{[0-9A-Fa-f]+}Unicode: 正規表現 [0-9A-Fa-f]+ にマッチする文字シーケンスは、Unicode のコードポイントです。 そのコードポイントの UTF-8 表現を文字列として出力します。 シーケンスを波括弧で囲む必要があります。例 "\u{41}" === "A"

文字列(string)内の変数の置き換え

文字列がダブルクォーテーションで括られるかヒアドキュメントで指定された場合、 その中の変数は置き換えられる。
<?php
$name = 'hogehoge';
echo "私の名前は $name です。";	/* 私の名前は hogehoge です。を表示 */
?>

ヒアドキュメント(<<<)

NULL型(null)

null 型は、PHPの unit 型(意味のある情報を持たないことを示す型)であり、単一の値 null しか持たない。

※PHPでは null 型は unit 型としているが、多言語では異なる。Unit型は「何もしない」ことを表す型、nullは「値がない」ことを表す値(またはその状態)という違いがある。

nullは「値が存在しないこと」を示す特別な値である。大文字・小文字は区別されない。ただし、nullと、未定義値は、is_null() などで判断する際の動作が異なる。

<?php
$var = null;

/* is_null($var) === true であり NULL型 が表示される */
if (is_null($var) === true) {
	echo 'NULL型';
} else {
	echo 'NULL型ではない';
}
?>
unset() した変数の is_null()、isset()、empty() の評価
関数unset() した変数警告(Notice/Warning)
is_null()true発生する
empty()true 発生しない
isset()false発生しない
<?php
$var = 'hogehoge';
unset($var);

/* is_null($var) === true であり NULL型 が表示される */
if (is_null($var) === true) {
	echo 'NULL型' . '<br>';
} else {
	echo 'NULL型ではない' . '<br>';
}

if (is_null($var) === true) {
	echo 'is_null() は true' . '<br>';
} else {
	echo 'is_null() は false' . '<br>';
}

if (empty($var) === true) {
	echo 'empty() は true' . '<br>';
} else {
	echo 'empty() は false' . '<br>';
}

if (isset($var) === true) {
	echo 'isset() は true' . '<br>';
} else {
	echo 'isset() は false' . '<br>';
}
?>

未定義値

is_null()、isset()、empty() の null、''、0 などの評価
is_null()empty()isset()
未定義値true ※1truefalse
$var = nulltruetruefalse
$var = ''falsetruetrue
$var = ""falsetruetrue
$var = 0falsetruetrue
$var = 1falsefalsetrue
$var = '0'falsetruetrue
$var = "0"falsetruetrue
$var = truefalsefalsetrue
$var = falsefalsetruetrue
$var = "ABC"falsefalsetrue

※1 Warningが発生する(PHP Notice: Undefined variable)

<?php
$var = 'hogehoge';
unset($var);

/* is_null($var) === true であり NULL型 が表示される */
if (is_null($var) === true) {
	echo 'NULL型' . '<br>';
} else {
	echo 'NULL型ではない' . '<br>';
}

if (is_null($var) === true) {
	echo 'is_null() は true' . '<br>';
} else {
	echo 'is_null() は false' . '<br>';
}

if (empty($var) === true) {
	echo 'empty() は true' . '<br>';
} else {
	echo 'empty() は false' . '<br>';
}

if (isset($var) === true) {
	echo 'isset() は true' . '<br>';
} else {
	echo 'isset() は false' . '<br>';
}
?>

NAN(not a number)

コールバック(callable)

キャスト(型の相互変換)

PHPは変数宣言時に明示的な型定義を必要としない(動的型付け言語)である。変数の型は保存する値によって決まる。

$var に 文字列を代入すれば $var は String型になり、$var に 整数を代入すれば $var は int型になる。$var に 文字列を代入後、整数を代入すれば $var は int型になる。

変数を強制的に特定の型に変換したい場合は、キャストすることで特定の型に変換できる。

キャスト(型の相互変換) 一覧表
キャスト機能注意点
(int)整数へのキャスト
(integer)(int) のエイリアス(別名)非推奨
(bool)真偽値へのキャスト
(boolean)(bool)のエイリアス(別名)非推奨
(float)浮動小数点数へのキャストPHPはC言語で作られている。PHPでdoubleまたはfloatと定義すると内部のC言語ではdoubleとして扱われる。
(double)(float) のエイリアス(別名)非推奨
(real)(float) のエイリアス(別名)非推奨。PHP 8.0.0で削除
(string)文字列へのキャスト
(array)配列へのキャスト
(object)オブジェクトへのキャスト
(unset)NULL値へのキャスト
(binary)バイナリ文字列へのキャストバイナリ文字列への対応はPHP5.2.1以上
<?php
(int)			整数
(integer)		(int)と同義。非推奨
(bool)			真偽値
(boolean)		(bool)と同義。非推奨
(float)			浮動小数点数
(double)		(float)と同義。非推奨
(real)			(float)と同義。非推奨。PHP 8.0.0で削除
(string)		文字列
(array)			配列
(object)		オブジェクト
(unset)			NULL値
(binary)		バイナリ文字列(PHP5.2.1~)
?>

PHPのクラス

インスタンスの生成

インスタンスは new 命令を使用し生成する。

<?php
class MyClass {
}

$mycls = new MyClass();	/* クラスのインスタンスを生成 */
?>

クラスのプロパティ、メソッドのスコープ(アクセス修飾子)

  1. public
    クラス内、クラス外のどこからでもアクセス可能。※アクセス修飾子の省略が可能(アクセス修飾子を記述しない場合は自動的にpublicとして扱われる。「可読性」「メンテナンス性」を担保するため public は必ず記述する)。
  2. private
    宣言したクラス内のみアクセス可能。
  3. protected
    クラス内と、そのクラスの親クラス、継承した子クラスからのアクセスが可能。
  4. static
    クラスのインスタンス化なしでアクセス可能。
  5. アクセス修飾子なし
    全て public になる。
クラスのプロパティ、メソッドのスコープ(アクセス修飾子)
publicprotectedprivate宣言なしvar 非推奨
親クラス×
自クラス
子孫クラス×
インスタンス××

private プロパティ

private で宣言したプロパティ、メソッドは、宣言したクラス内のみアクセス可能である。

以下のコードは、クラス内で private $name を宣言し、クラス内のメソッドから $this->name で アクセスしている。

重要なポイントは、クラスのプロパティである $this->name と、クラスのメソッド内(引数)で定義した ローカル変数 $name を使い分けている点だ。

同じ名前の変数($name)でも、プロパティとメソッド内のローカル変数は別の扱いとなる。

※ $this->name は オブジェクトのプロパティだが、$this->$name は 可変プロパティ になるので注意が必要。

Java、C#などの厳格な言語仕様のプログラミング言語と比較し、PHPは言語仕様書がなく、公式ドキュメント(PHP Manual)や実際の動作(挙動)が事実上の仕様として扱われてきた歴史を持っている。

$this->$name に似たような記述は、バグの温床になるので、厳格な言語仕様のプログラミング言語ではできない(コンパイルエラー)。

<?php
class MyClass {
	private $name;	/* private変数を定義 */

	function setName($name) {
		$this->name = $name;	/* private変数 $name に setNameの引数 $name の内容を代入*/
					/*
					$thisはクラス内のプロパティやメソッドにアクセスできる。

					$this->name = $name の左辺の $this->name は
					クラス冒頭で定義された private $name を指している。

					$this->name = $name の右辺の $name は
					function setName($name) 引数 $name を指している。
					*/
	}
	function getName() {
		return $this->name;	/* private変数 $name の値を返す */
	}
}

$mycls = new MyClass();		/* クラスのインスタンスを作成 */
$mycls->setName('hogehoge');	/* setName()メソッドに値を設定する */
echo $mycls->getName();		/* getName()メソッドで値を取得し出力する */
?>

PHPの特徴

PHPには以下の特徴がある。

  1. インタプリタ言語(コンパイル不要)
    インタプリタ言語なので、記述してすぐに動作確認できるメリットがある。コンパイルしないため実行時にエラーが発生しやすい。
  2. PHPは変数宣言時に明示的な型定義を必要としない(動的型付け言語)
    明示的な型定義を必要としない動的型付け言語なので、簡単にプログラムを記述し動かすことができる。変数宣言が必須(静的型付け言語)ではないので、バグの温床になりやすい。
  3. HTMLに直接PHPのコードを記述できる
    <?php を開始タグ、 ?> を終了タグとして認識し、タグの内側をPHPのコードとして実行する。

    タグの外側はPHPパーサに無視されるので、HTMLに「開始タグ <?php ~ 終了タグ ?>」を記述し、ファイル名(拡張子)を .php とすることで、HTML内に直接コードを埋め込んで動的なWebページを生成できる。

PHPの書き方

HTMLに直接PHPのコードを記述する

PHPはHTMLに直接PHPのコードを記述できる。

<?php を開始タグ、 ?> を終了タグとして認識し、タグの内側をPHPのコードとして実行する。

タグの外側はPHPパーサに無視されるので、HTMLに「開始タグ <?php ~ 終了タグ ?>」を記述し、ファイル名を .php とすることで、HTML内に直接コードを埋め込んで動的なWebページを生成できる。

※パーサとはソースコードやXML、HTMLなどの言語で記述された構造的なテキストデータを解析し、コンピュータが扱いやすいデータ構造に変換するプログラムの総称。コンパイラとは別物。

<?php タグの後ろ、?>の前には必ず「改行・半角空白・タブ」のいずれかを記述する。「改行・半角空白・タブ」がないとエラーになる。

Hello Worldを出力する

<?php ~ ?>の前後を改行で記述

<?php
echo 'Hello World';
?>

<?php ~ ?>の前後を半角空白で記述

<?php echo 'Hello World' ?>

HTMLの中でHello Worldを出力する

<html>
<head>
<title>HTMLのタイトル</title>
</head>
<body>
<h1>h1タグ</h1>
<?php
	echo 'Hello World';
?>
</body>
</html>

<?= ?> は、echo の代わりに値を画面に出力する。

賛否両論あると思うが、可読性、一貫性の低下と、バグの温床になりやすいため <?= ?> は望ましくない。

<html>
<head>
<title>HTMLのタイトル</title>
</head>
<body>
<h1>h1タグ</h1>
<?= 'Hello World'; ?>
</body>
</html>

非推奨タグの記述方法(short_open_tag, asp_tags)

php.ini で short_open_tag が On に設定されている場合は、<?php ~ ?> の代わりに <? ~ ?> を、<?php echo ~ ?> の代わりに <?= ~ ?> を使用できる。

<? ~ ?>
<? echo 'Hello World'; ?>
<?php= ~ ?>
<?= echo 'Hello World'; ?>

php.ini で asp_tags が On に設定されている場合は、<?php ~ ?> の代わりに <% ~ %> を、<?php echo ~ ?> の代わりに <%= ~ %> を使用できる。

<% ~ %>
<% echo 'Hello World'; %>
<%= ~ %>
<%= echo 'Hello World'; %>

PHPの文の区切り

PHPでは、文はセミコロン「;」で区切る。

<?php
echo 'Hello World';
echo 'hogehoge world';
?>

セミコロン「;」で区切っていれば、1行に複数の文を記述できる。

<?php
echo 'Hello World'; echo 'hogehoge world';
?>

PHPで改行を出力する

PHPでは、改行の出力は \n を記述する。

\n を使用するときは文字列をダブルクォーテーションで囲む必要がある。シングルクォーテーションでは改行されない。

<?php
echo "Hello World \n hogehoge world";
?>

PHPでHTMLの改行を出力する

<?php
echo 'Hello World<br>';
echo 'hogehoge world<br>';
?>

nl2br()で\nを<br>に変換する

<?php
echo nl2br("Hello World \n hogehoge world");
?>

PHPのコメント

PHPのコメントは、/* */(複数行)、//(単行)、#(単行) の3つの書き方がある。

一般的には /* */、// の2つを使用する。

  1. /* */ は /*をコメント開始タグ、 */ をコメント終了タグとして認識し、タグの内側をコメントとして認識する。
    単行記述 例
    /* コメントを書く */
    
    複数行記述 例
    /*
      コメントを書く
    */
    
    /*
     *  コメントを書く
     */
    
  2. // は // から改行までをコメントとして認識する。
    記述 例
    // コメントを書く
    

  3. # は // と同様。

Javaのコメント

Javaのコメントは、/* */(複数行)、//(単行) の2つの書き方がある。この他に /** */ とすることで Javadoc 用のコメントを記述できる。

  1. /* */ は /*をコメント開始タグ、 */ をコメント終了タグとして認識し、タグの内側をコメントとして認識する。
    単行記述 例
    /* コメントを書く */
    
    複数行記述 例
    /*
      コメントを書く
    */
    
    /*
     *  コメントを書く
     */
    
  2. // は // から改行までをコメントとして認識する。
    記述 例
    // コメントを書く
    

Javadocのコメント

/** */ は Javadoc(ジャバドック) と呼ばれ、メソッドの引数や戻り値の意味を記述するために使う。

これを書くことで、HTML形式のAPIドキュメントを生成したり、開発ツール(Eclipseなど)上でマウスを置いた時に説明文がポップアップ表示されるようになる。

基本コマンド
コマンドプロンプトやターミナルで、ソースファイルがあるディレクトリに移動して実行する。

-d doc: 生成されたHTML群を doc というディレクトリに出力する指定(ディレクトリ名は自由に変更可能)。

[ソースファイル名.java]: 対象となるJavaファイルを指定する。*.java とすればカレントディレクトリ内の全ファイルを対象にできる。

javadoc -d doc [ソースファイル名.java]

オプション
パッケージ単位で出力指定する。

-sourcepath でソースのルート(srcなど)を指定し、-subpackages で対象のパッケージ名を指定する。

javadoc -d doc -sourcepath src -subpackages com.example

エンコーディングの指定(文字化け対策)
ソースが UTF-8 で書かれている場合、これを指定しないと文字化けすることがある。

javadoc -d doc -encoding UTF-8 -charset UTF-8 [ファイル名]
Java、PHP、Ruby、Python、Go のコメント
比較項目JavaPHPRubyPythonGo
単行コメント// のみ// または #RubyPythonGo
複数行コメント/* *//* */RubyPythonGo
ドキュメント化PHPDoc/** */
Javadoc
RubyPythonGo

命名規則(ネーミングコンベンション)

PHPの命名規則にデファクトスタンダードは存在しない。キャメルケース、スネークケース いずれも使用している。

PHPの言語上の関数は、スネークケースで命名されており、クラス処理ではキャメルケースが使われている。

現在は PSR-12 という規格が業界標準(モダンな開発のデファクト)として広く普及している。

  1. isNull
    キャメルケース(camelCase)。単語の区切りを大文字で表すスタイル。Java、JavaScript、C#などでよく使われる。
  2. is_null
    スネークケース(snake_case)。Python、Ruby、C言語などで一般的。
PHPの命名規則
種類書式例PHPでの主な用途
キャメルケースisSpaceクラス処理。現在の主流。
スネークケースis_space関数名。PHP標準関数に似せる場合。

ミニファイ(コードの圧縮)を行う場合のコメントは全て /* */ で記述する

HTMLのミニファイ(コードの圧縮)はファイルサイズを小さくして読み込み速度を向上させる目的の他に、HTMLを読みにくくし無断複製を防ぐ目的でも行われる。

ミニファイを行うファイルにPHPのソースコードがあると改行コードが取り除かれてしまい、//、# でコメントを記述すると正しく機能しなくなる。

ミニファイを行う場合は、コメントは全て /* */ で記述する必要がある。

例外処理

PHPの例外処理は try catch finally を使用する。

try{} ブロック内でエラー(Exception)を捕捉し、catch{} ブロックで発生したエラーをどのように処理するか記述する。finally{} ブロックはエラーの発生を問わず必ず実行される。

throw は意図的に意図的に例外を発生する。

try catch finally throw の仕様

  1. try
    try句は、try{} ブロック内で発生した例外(Exception)を捕捉する。必ず catch か finally(あるいは両方)を伴わなければならない。
  2. catch
    try句 で例外(Exception)が発生すると catch句 にスローされる。catch句では例外をどのように処理するか記述する。

    例外の型ごとに複数記述でき、上から順に評価される。
  3. finally
    例外(Exception)がスローされたかどうかに関わらず必ず実行される。

    return 命令が try{} または catch{}、あるいはその両方に存在した場合、return 命令は出現したときに評価されるが、finally{} ブロックは return 命令の実行前に実行され、finally{} ブロック実行後に return 命令は実行される。

    return 命令が try{} または catch{}、あるいはその両方に存在し、finally{} にも存在した場合、return 命令は出現したときに評価されるが、finally{} ブロックは try{} または catch{} の return 命令の前に実行され、finally{} ブロックの return 命令が実行される。
  4. throw
    意図的に例外を発生(スロー)させる。これ以上処理を継続できない場合や、上位層に例外を報告したい場合に使用する。

例 PHP try catch finally

try {
	// 例外が発生する可能性のある処理
} catch (PDOException $e) {
	// データベース関連(JavaのSQLException相当)のエラー処理
	echo "DBエラーが発生しました。";
} catch (TypeError $e) {
	// 型の不一致など特定のエラー処理
	echo "型エラーが発生しました。";
} catch (Exception $e) {
	// それ以外の予期せぬエラー(JavaのException相当)の共通処理
	echo "予期せぬエラーが発生しました。";
} finally {
	// 最後に必ず実行する処理(PHP 5.5以降で使用可能)
}

例 Java try catch finally

try {
	// 例外が発生する可能性のある処理
} catch (ClassNotFoundException e) {
	System.err.println("JDBCドライバが見つかりません。");
} catch (SQLException e) {
	System.err.println("DB操作エラーが発生しました。");
} catch (Exception e) {
	System.err.println("予期せぬエラーが発生しました。");
} finally {
	// finally句は処理の try句、catch句が実行された後に必ず実行される
}

詳しくは Java try catch finally の仕様 を参照。

throw 意図的に例外を発生する

throw は意図的に例外を発生することができる。

<?php
throw new Exception('意図的にエラーを発生する');
?>
<?php
try {
	throw new Exception('意図的にエラーを発生する');
} catch(Exception $e) {
	echo $e;	/*「意図的にエラーを発生する」が出力される */
}
?>

try catch finally による例外処理

次のサンプルコードでは、try{} ブロック内で function func() を呼び出し、func() で throw 命令を使い意図的にエラーを発生させている。

func() 内で発生したエラーは、呼び出し元の try{} ブロック で捕捉され、catch{} ブロックが実行される。

<?php
function func() {
	try {
		throw new Exception('意図的にエラーを発生する');
	} catch(Exception $e) {
		echo $e;	/*「意図的にエラーを発生する」が出力される */
	}
}

func();		/* funcを呼び出し */
?>

深い階層で発生したエラーの例外処理

次のサンプルコードでは、try{} ブロック内で function func() を呼び出し、func() 内で function sub_func() を呼び出し、sub_func() で throw 命令を使い意図的にエラーを発生させている。

func()、sub_func()には try catch による例外処理は記述しておらず、func() の呼び出し元に try catch による例外処理を記述している。

sub_func() 内で発生したエラーは、呼び出し元の func() に投げられ、最終的に func() の呼び出し元の try{} ブロック で捕捉され、catch{} ブロックが実行される。

PHPにはJavaのような、throws Exception 命令(呼び出し元にエラーを投げる命令)はないが、try catch を書かない事で throws Exception と同様のことができる。

<?php
function func() {
	sub_func();	/* sub_funcを呼び出し */
}

function sub_func() {
	throw new Exception('意図的にエラーを発生する');
}

try {
	func();		/* funcを呼び出し */
} catch(Exception $e) {
	echo $e;	/*「意図的にエラーを発生する」が出力される */
}
?>

try catch finally を使用したデータベース接続サンプル

<?php
/**
* MySQLに接続する
* 
* MySQLに接続する
*
* @version 1.0 
* @author hoge
* @param &$pdo MySQLに接続するコネクションオブジェクト
* @return true:正常 false:異常 (Insert失敗)
* @throws Exception なんてPHPにはねぇよ
*/

/* PHP 7.0.0 以降で使用します。 */
function connectMySql(&$pdo) {

	global $printDebugMode;
	$printDebugMode = false;

	print("");
	print("▼ function MySQL 接続(connectMySql) ------------------------------");

	/* MySql 接続情報 */
	$host = "mysql0000.db.hogehoge.jp";
	$db = "db_name";
	$user = "db_user";
	$pass = "db_pass";
	$dsn = "mysql:host={$host};dbname={$db};charset=utf8mb4";

	/* tryにPDOの処理を記述 */
	try {
		/* PDOインスタンスを生成 */
		$pdo = new PDO($dsn, $user, $pass);
		$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
		$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
		print("データベース {$db} に接続しました。");

	/* エラー(例外)が発生した時の処理を記述 */
	} catch (PDOException $e) {
	 
		/* エラーメッセージを表示する */
		print('データベースの接続に失敗しました mysql_error = ' . $e->getMessage());
		return false;
	} finally {
		print("▲ function MySQL 接続(connectMySql) ------------------------------
"); } return true; } /* * MySQLに接続する * @param &$connection MySQLに接続するコネクションオブジェクト * @return true:正常 false:異常 (Insert失敗) * @throws Exception なんてPHPにはねぇよ */ /* PHP 7.0.0 で削除されました。 */ function old_connectMySql(&$connection) { print(""); print("▼ MySQL 接続(connectMySql) ------------------------------"); /* MySql 接続情報 */ $url = "mysql0000.db.hogehoge.jp"; $db = "db_name"; $user = "db_user"; $pass = "db_pass"; /* MySQLへ接続 */ $connection = mysql_connect($url,$user,$pass); if ($connection === false) { print('データベースの接続に失敗しました mysql_error = ' . mysql_error()); print("▲ MySQL 接続(connectMySql) ------------------------------"); print(""); return false; } /* こんな書き方もできます。dieはその場で実行をphpの実行を止めます。 ※正直、美しいコードとは言えません。 $connection = mysql_connect($url,$user,$pass) or die("MySQLへの接続に失敗しました"); */ /* データベースを選択する */ $rtn = mysql_select_db($db, $connection); if ($rtn === false) { print('データベースの選択に失敗しました mysql_error = ' . mysql_error()); mysql_close($connection); print("▲ MySQL 接続(connectMySql) ------------------------------"); print(""); return false; } /* * こんな書き方もできます。 *  ※汚いコードです。なにより、$connectionの開放をしていません。 * ※PHPでは、die実行時に、自動的にデータベースとの接続を切断するそうです。 * が、PHP側で切断しても、DB側で切断を感知して、自動でコネクションを開放する仕組みになってないと、コネクションは掴みっぱなしになります。 */ /* $rtn = mysql_select_db($db, $connection) or die("データベースの選択に失敗しました"); */ print("データベース接続に成功しました。"); print("▲ MySQL 接続(connectMySql) ------------------------------"); print(""); return true; } ?>

PHP、Rubyの言語比較

HTMLに直接PHPのコードを記述する

PHPは、HTMLに「開始タグ <?php ~ 終了タグ ?>」を記述し、ファイル名(拡張子)を .php とすることで、HTML内に直接コードを埋め込んで動的なWebページを生成できる。

Rubyは、Embedded Ruby を使用し、<% %> または <%= %> を使用する。

<% %> はRubyの処理のみで、HTMLへの出力はしない場合に使用する。<%= %> はRubyの処理および、HTMLへの出力する場合に使用する。

PHP、Rubyの言語比較
機能Java/JSPPHPRubyPython
HTMLに直接コードを記述JavaPHPRubyPython
HTMLに直接コードを記述<% %>
<%= %>
${ }
<?php ?>
<?= ?>
ERBを使用
<% %>
<%= %>
Python

シンタックスハイライト

highlight.js

シンタックスハイライトをおこなうライブラリは syntaxhighlighter、highlight.js、Prism.js などがある。※syntaxhighlighter は2017年で更新が止まっており、事実上開発が終了している。

当サイトは highlight.js を使用している。

highlight.js は下記のスクリプトを<body>~</body>タグの間に記述するだけで使用できる。

<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.15.10/styles/a11y-dark.min.css">
<script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.15.10/highlight.min.js"></script>
<script>hljs.initHighlightingOnLoad();</script>

シンタックスハイライトさせたいコードを<pre><code></code></pre>で囲む事でシンタックスハイライトされる。

<pre><code>
<?php
$num = 1;		/* グローバルスコープで変数定義 */
function func() {
	global $num;	/* グローバルスコープの$numを呼び出し */
	echo $num;	/* 1が出力される */
}
func();			/* funcを呼び出し */
?>
</code></pre>

a11y-dark.min.css を別のテーマ(配色)に変えることもできる。おすすめは a11y-dark.min.css、vs2015.min.css、xt256.min.css だ。

おすすめ記事

10日で使えるPHP | 未経験のサルでも分かるPHPの学習サイト 10日で使えるPHP | 未経験のサルでも分かるPHPの学習サイト

文系未経験、サルでも10日でPHPを使えるように内容を構成した独学向け学習サイト。不要な基礎はバッサリ切り捨て必要な基礎を十分に深堀した・・・  続きを見る 

Copyright (C) 2001~2026年 e-elder.jp All Rights Reserved. Update 2026年2月17日
運営者情報 ご質問はこちらへお願いします info@e-elder.jp