「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には以下の特徴がある。
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つを使用する。
PHPの命名規則にデファクトスタンダードは存在しない。キャメルケース、スネークケース いずれも使用している。
PHPの言語上の関数は、スネークケースで命名されており、クラス処理ではキャメルケースが使われている。
現在は PSR-12 という規格が業界標準(モダンな開発のデファクト)として広く普及している。
| 種類 | 書式例 | PHPでの主な用途 |
|---|---|---|
| キャメルケース | isSpace | クラス処理。現在の主流。 |
| スネークケース | is_space | 関数名。PHP標準関数に似せる場合。 |
HTMLのミニファイ(コードの圧縮)はファイルサイズを小さくして読み込み速度を向上させる目的の他に、HTMLを読みにくくし無断複製を防ぐ目的でも行われる。
ミニファイを行うファイルにPHPのソースコードがあると改行コードが取り除かれてしまい、//、# でコメントを記述すると正しく機能しなくなる。
ミニファイを行う場合は、コメントは全て /* */ で記述する必要がある。
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を使えるように内容を構成した独学向け学習サイト。不要な基礎はバッサリ切り捨て必要な基礎を十分に深堀した・・・ 続きを見る |