「10日で使えるPHP | 未経験のサルでも分かるPHPの学習サイト」は、現役コーダー(プログラマー)のために最速、最短でPHPを書けることを目的とした学習サイトだ。
業務システム開発に不要な要素をバッサリ切り捨て、必要なエッセンスに選択と集中している。
流し読みで全体像を捉えて、必要な箇所からつまみ食いすれば、3日でUI/DBまわりを十分書けるようになる。
非エンジニア、文系未経験者、サルでも独学10日でPHPを使えるように内容を構成した。
不要な基礎はバッサリ切り捨て、必要な基礎を十分に深堀した。10日後にはデータベースを使用したWEBシステムを開発できるようになる。
プログラミングスクールでチンタラお勉強をしたつもりになっているアホを横目に、ブッチギリで10日でエンジニアの入り口に立ってほしい。
![]() | 10日で使えるPHP | 未経験のサルでも分かるPHPの学習サイト 文系未経験、サルでも10日でPHPを使えるように内容を構成した独学向け学習サイト。不要な基礎はバッサリ切り捨て必要な基礎を十分に深堀した・・・ 続きを見る |
![]() | 新卒や現役エンジニアの学習方法(オンライン学習 or 書籍) 「SIerやメーカーに就職した新卒」や「現役エンジニア」で、動画配信で学ぶ技術者はほぼゼロと言ってよい。洗練された書籍で学んだほうが短期間で技術習得できるし高すぎる。・・・ 続きを見る |
![]() | RUNTEQの就職先と就職できた卒業生インタビュー RUNTEQの就職先と就職できた卒業生のインタビュー。 インタビュー対象の卒業生の学歴は不明2名、大学中退1名をを除き全員大卒、前職は派遣社員1名、新卒1名を除き、全員正規雇用の社員または公務員だ。・・・ 続きを見る |
同名の関数を定義した場合、パースエラーが発生する。
パースエラー(構文エラー)は、PHPがコードをパース(構文解釈)する段階で止まってしまうエラーで、多くの場合、間違った構文 ; の付け忘れ、{} () の閉じ忘れなどを記述して発生する。
パースエラーは致命的なエラーで、コンパイルエラーに相当する。パースエラーが発生した場合、プログラムの実行を停止する。
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); /* はラッコ 表示 */
?>整数(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以降)
?><?php
$num = 1.234; /* 浮動小数点数 */
$num = 1.2e3; /* 浮動小数点数(指数表記) 1.2 × 103 */
$num = 7E-10; /* 浮動小数点数(指数表記) 7 × 10 - 10 */
$num = 123_456_789; /* 数値リテラルセパレータ(PHP 7.4.0 以降) */
?>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 表示 */
?>文字列はシングルクオーテーション(')、ダブルクォーテーション(")で囲む。ダブルクォーテーションで囲まれた文字列の中ではエスケープシーケンスを使用できる(※シングルクオーテーションでは使用できない)。
<?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" |
<?php
$name = 'hogehoge';
echo "私の名前は $name です。"; /* 私の名前は hogehoge です。を表示 */
?>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() した変数 | 警告(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() | empty() | isset() |
|---|---|---|---|
| 未定義値 | true ※1 | true | false |
| $var = null | true | true | false |
| $var = '' | false | true | true |
| $var = "" | false | true | true |
| $var = 0 | false | true | true |
| $var = 1 | false | false | true |
| $var = '0' | false | true | true |
| $var = "0" | false | true | true |
| $var = true | false | false | true |
| $var = false | false | true | true |
| $var = "ABC" | false | false | true |
※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>';
}
?>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~)
?>インスタンスは new 命令を使用し生成する。
<?php
class MyClass {
}
$mycls = new MyClass(); /* クラスのインスタンスを生成 */
?>| public | protected | private | 宣言なし | var 非推奨 | |
|---|---|---|---|---|---|
| 親クラス | 〇 | 〇 | × | 〇 | 〇 |
| 自クラス | 〇 | 〇 | 〇 | 〇 | 〇 |
| 子孫クラス | 〇 | 〇 | × | 〇 | 〇 |
| インスタンス | 〇 | × | × | 〇 | 〇 |
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はHTMLに直接PHPのコードを記述できる。
<?php を開始タグ、 ?> を終了タグとして認識し、タグの内側をPHPのコードとして実行する。
タグの外側はPHPパーサに無視されるので、HTMLに「開始タグ <?php ~ 終了タグ ?>」を記述し、ファイル名を .php とすることで、HTML内に直接コードを埋め込んで動的なWebページを生成できる。
※パーサとはソースコードやXML、HTMLなどの言語で記述された構造的なテキストデータを解析し、コンピュータが扱いやすいデータ構造に変換するプログラムの総称。コンパイラとは別物。
<?php タグの後ろ、?>の前には必ず「改行・半角空白・タブ」のいずれかを記述する。「改行・半角空白・タブ」がないとエラーになる。
<?php ~ ?>の前後を改行で記述
<?php
echo 'Hello World';
?><?php ~ ?>の前後を半角空白で記述
<?php echo '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>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
echo 'Hello World';
echo 'hogehoge world';
?>セミコロン「;」で区切っていれば、1行に複数の文を記述できる。
<?php
echo 'Hello World'; echo 'hogehoge world';
?>PHPでは、改行の出力は \n を記述する。
\n を使用するときは文字列をダブルクォーテーションで囲む必要がある。シングルクォーテーションでは改行されない。
<?php
echo "Hello World \n hogehoge world";
?><?php
echo 'Hello World<br>';
echo 'hogehoge world<br>';
?><?php
echo nl2br("Hello World \n hogehoge world");
?>PHPのコメントは、/* */(複数行)、//(単行)、#(単行) の3つの書き方がある。
一般的には /* */、// の2つを使用する。
単行記述 例
/* コメントを書く */
複数行記述 例
/*
コメントを書く
*/
/*
* コメントを書く
*/
記述 例
// コメントを書く
Javaのコメントは、/* */(複数行)、//(単行) の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 |
|---|---|---|---|---|---|
| 単行コメント | // のみ | // または # | Ruby | Python | Go |
| 複数行コメント | /* */ | /* */ | Ruby | Python | Go |
| ドキュメント化 | PHPDoc | /** */ Javadoc | Ruby | Python | Go |
PHPの命名規則にデファクトスタンダードは存在しない。キャメルケース、スネークケース いずれも使用している。
PHPの言語上の関数は、スネークケースで命名されており、クラス処理ではキャメルケースが使われている。
現在は PSR-12 という規格が業界標準(モダンな開発のデファクト)として広く普及している。
| 種類 | 書式例 | PHPでの主な用途 |
|---|---|---|
| キャメルケース | isSpace | クラス処理。現在の主流。 |
| スネークケース | is_space | 関数名。PHP標準関数に似せる場合。 |
HTMLのミニファイ(コードの圧縮)はファイルサイズを小さくして読み込み速度を向上させる目的の他に、HTMLを読みにくくし無断複製を防ぐ目的でも行われる。
ミニファイを行うファイルにPHPのソースコードがあると改行コードが取り除かれてしまい、//、# でコメントを記述すると正しく機能しなくなる。
ミニファイを行う場合は、コメントは全て /* */ で記述する必要がある。
PHPの例外処理は try catch finally を使用する。
try{} ブロック内でエラー(Exception)を捕捉し、catch{} ブロックで発生したエラーをどのように処理するか記述する。finally{} ブロックはエラーの発生を問わず必ず実行される。
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 は意図的に例外を発生することができる。
<?php
throw new Exception('意図的にエラーを発生する');
?><?php
try {
throw new Exception('意図的にエラーを発生する');
} catch(Exception $e) {
echo $e; /*「意図的にエラーを発生する」が出力される */
}
?>次のサンプルコードでは、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; /*「意図的にエラーを発生する」が出力される */
}
?><?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は、HTMLに「開始タグ <?php ~ 終了タグ ?>」を記述し、ファイル名(拡張子)を .php とすることで、HTML内に直接コードを埋め込んで動的なWebページを生成できる。
Rubyは、Embedded Ruby を使用し、<% %> または <%= %> を使用する。
<% %> はRubyの処理のみで、HTMLへの出力はしない場合に使用する。<%= %> はRubyの処理および、HTMLへの出力する場合に使用する。
| 機能 | Java/JSP | PHP | Ruby | Python |
|---|---|---|---|---|
| HTMLに直接コードを記述 | Java | PHP | Ruby | Python |
| HTMLに直接コードを記述 | <% %> <%= %> ${ } | <?php ?> <?= ?> | ERBを使用 <% %> <%= %> | Python |
シンタックスハイライトをおこなうライブラリは 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を使えるように内容を構成した独学向け学習サイト。不要な基礎はバッサリ切り捨て必要な基礎を十分に深堀した・・・ 続きを見る |