- 2010-01-27 (水) 9:25
- PHP
PerlとRubyの文法一覧がとても良くまとまっていたので、便乗してPHPでもやってみました。
他の言語をある程度知っている人はこれを読めばPHPの文法を何となく理解できると思います。
間違い、不足等々あれば教えて下さいm(_ _)m
バージョン
PHP5.3系がリリースされていますが、ここではPHP5.2系を対象としています。
1.基礎
コードブロック
PHPコードは「<?php」という開始タグから始まります。終了タグは「?>」です。HTMLにPHPコードを埋める際は終了タグを使いますが、ライブラリのようにPHPコードのみを記述する際は終了タグを省くことが慣例となっています。
終了タグを省く理由について id:Kiske さんに解説頂いています。ありがとうございます。
PHP基礎文法最速マスターの補足 – Absolute Playing!
<?php hoge(); ?> <?php $i = 1; hoge($i); ?>
<?php
hoge();
[/php]
<h4>print文</h4>
<p>print/echoを使います。</p>
<?php
print "Hello World!";
echo "Hello World!";
[/php]
<p>デバッグにはvar_dump()をよく使います。var_dump()では変数の内容が出力されます。</p>
<?php
$array = array(1,2,3);
var_dump($array);
array(3) {
  [0]=>
  int(1)
  [1]=>
  int(2)
  [2]=>
  int(3)
}
				コメント
一行コメント
// コメント # コメント
複数行コメント
/* コメント コメント */
変数の宣言
変数の宣言です。
$a = 'string'; $i = 1;
スクリプトの実行
コマンドラインでPHPファイルを実行します。
$ php hoge.php
PHPコードを直接記述することもできます。<?php ?>は不要です。
$ php -r "var_dump('a');" 
				出力結果をファイルに書き出すにはリダイレクトを使います。
$ php hoge.php > out
スクリプトの文法チェック
phpコマンドで文法がチェックできます。
$ php -l hoge.php
2. 数値
数値の表現
数値には整数、浮動小数点があります。
<?php
$int = 100;
$float = 100.123;
[/php]
<h4>四則演算</h4>
<?php
$i = 1 + 1;
$i = 1 - 1;
$i = 1 * 1;
$i = 1 / 2;
[/php]
<p>余りと商。商を求めるには普通の除算を行った後にintval関数で整数部を取り出します。</p>
<?php
$div = intval(3 / 2); // 商
$mod = 3 % 2; // 余り
[/php]
<h4>インクリメントとデクリメント</h4>
<?php
$i++;  // インクリメント
$i--;   // デクリメント
[/php]
<h3>3. 文字列</h3>
<h4>文字列表現</h4>
<p>文字列はシングルクォートかダブルクォートで囲みます。ダブルクォートの中では\t(タブ)や\n(改行)などの特殊文字を利用することができます。またダブルクォートで囲まれた文字列の中では変数展開することができます。</p>
<?php
$str1 = "abc\tcde"; // abc  cde(\tがタブ[0x09])
$str2 = 'abc\tcde'; // abc\tcde(\tが文字列)
$str3 = "$str1 100"  // abc  cde 100 //$str1が展開される
$str4 = "{$str1}100"  // 変数名に文字列が繋がる時は{}で囲む
[/php]
<h4>文字列操作</h4>
<?php
// 結合
$join1 = 'aaa' . 'bbb';
$join2 = implode(',', array('aaa', 'bbb', 'ccc'));
// 分割
$split = explode(',', 'aaa,bbb,ccc');
// 長さ
$length = strlen('abcdef');
// 長さ(マルチバイト)
// 内部エンコーディングの設定が必要
// mb_internal_encoding('UTF-8');  
$mb_length = mb_strlen('あいうえお');
// 切り出し
$substr = substr('abcd', 0, 2); // ab
// 検索
$index = strpos('abcd', 'bc'); // 見つかったらその位置(先頭が0)、見つからなかったらfalseが返る
[/php]
<h3>4. 配列、連想配列</h3>
<p>PHPには連想配列しかありません。配列はキーが数値の連想配列として表現されます。また順序を持っています。</p>
<?php
$array1 = array(1, 2, 3); // 配列(キーが0から始まる連想配列)
$array2 = array('a' => 1,  'b' => 2, 'c' => 3); // 連想配列
$array3 = array(1, 'a' => 1, 2); // 混在もok
				要素の参照と代入
<?php
$i = $array1[0];
$s = $array2['a'];
[/php]
[php]
<?php
$array1[3] = 1;
$array2['z'] = 'zzz';
[/php]
<p>要素の個数</p>
<?php
$len = count($array1);
[/php]
<h4>配列の操作</h4>
<?php
$array = array(1, 2, 3);
// 先頭を取り出す
$first = array_shift($array); // $first = 1 / $arrayは、(2, 3)
// 先頭に追加
array_unshift($array, 5); // $arrayは、(5, 2, 3)
// 末尾を取り出す
$last = array_pop($array); // $last = 3 / $arrayは、(5, 2)
// 末尾に追加
array_push($array, 9); // $arrayは、(5, 2, 9)
[/php]
<h4>連想配列に関する関数</h4>
<?php
// キーの取得
$keys = array_keys($array);
// 値の取得
$values = array_values($array);
// キーの存在確認
$boolean = array_key_exists('key', $array);
// キーの削除
unset($array['key']);
[/php]
<h3>6. 制御文</h3>
<h4>if文</h4>
<?php
if (条件) {
}
[/php]
<p>HTML内で記載する際は以下のような記法も用いられます。</p>
<?php if (条件): ?>
  <span>hoge</span>
<?php endif; ?>
				if 〜 else文
<?php
if (条件) {
} else {
}
[/php]
<p>HTML内で記載する際は以下のような記法も用いられます。</p>
<?php if (条件): ?>
  <span>hoge</span>
<?php else: ?>
  <span>foo</span>
<?php endif; ?>
				if 〜 else if 文
elseif or else ifが可。
<?php
if (条件) {
} else if {
}
[/php]
<p>HTML内で記載する際は以下のような記法も用いられます。</p>
<?php if (条件): ?>
  <span>hoge</span>
<?php elseif (条件): ?>
  <span>foo</span>
<?php endif; ?>
				while文
<?php
$i = 0;
while ($i < 5) {
  // 処理
  $i++;
}
[/php]
<p>HTML内で記載する際は以下のような記法も用いられます。</p>
<?php while ($i < 5): ?>
  <span><?php echo htmlspecialchars($i); ?></span>
  <?php $i++; ?>
<?php endwhile; ?>
				for文
<?php
for ($i = 0 ; $i < 5 ;$i++) {
}
[/php]
<p>HTML内で記載する際は以下のような記法も用いられます。</p>
<?php for ($i = 0 ; $i < 5 ; $i++): ?>
  <span><?php echo htmlspecialchars($i); ?></span>
<?php endfor; ?>
				foreach文
連想配列の各要素を処理できます。
<?php
foreach ($array as $v) {
  // $v が要素の値
}
foreach ($array as $k => $v) {
  // $k が要素のキー、$v が要素の値
}
				HTML内で記載する際は以下のような記法も用いられます。
<?php foreach ($array as $v): ?> <span><?php echo htmlspecialchars($v); ?></span> <?php endforeach; ?>
7. サブルーチン(関数)
PHPには関数があります。戻り値を返却するにはreturnを使用します。
<?php
function sum($v1, $v2) {
  return $v1 + $v2;
}
$total = sum(1, 2); // $total = 3
// 配列で多値を返すこともできます
function get_multi($v1, $v2) {
  $v1 += 100;
  $v2 += 200;
  return array($v1, $v2);
}
list($ret1, $ret2) = get_multi(1, 2); // $ret1 = 101 / $ret2 = 202
[/php]
<h3>8. ファイル入出力</h3>
<p>ファイル入出力にはいくつかの方法があります。</p>
<h4>fopen関数</h4>
<p>ファイルポインタを使ってファイルの入出力を行います。</p>
<?php
// 読み込み
$fp = fopen("/path/to/file", "r");
if (!is_resource($fp)) {
  die("can't open file");
}
while (!feof($fp)) {
  $line = fgets($fp, 4096);
  // 何か処理
}
fclose($fp);
// 書き込み
$fp = fopen("/path/to/file", "w");
if (!is_resource($fp)) {
  die("can't open file");
}
fputs($fp, $buff);
fclose($fp);
[/php]
<h4>file関数</h4>
<p>ファイル全体を読み込んで配列に格納します。</p>
<?php
$list = file("/path/to/file"); // ファイルの各行を連想配列で取得
[/php]
<h4>file_get_contents関数 / file_put_contents関数</h4>
<p>file_get_contents関数はファイル全体を読み込んで文字列として格納します。file_put_contents関数は変数の値を全てファイルに書き込みます。</p>
<?php
// 読み込み
$contents = file_get_contents("/path/to/file"); // ファイルの内容を取得
// 書き込み
file_put_contents("/path/to/file", $buff); // ファイルに $buff の内容を書き込み
[/php]
<h3>知っておいた方が良い文法</h3>
<h4>真偽値</h4>
<p>PHPでは以下の場合、偽と判断されます。</p>
<ul>
<li>boolean の FALSE</li>
<li>integer の 0 (ゼロ)</li>
<li>float の 0.0 (ゼロ)</li>
<li>空の文字列、 および文字列の "0"</li>
<li>要素の数がゼロである 配列</li>
<li>メンバ変数の数がゼロである オブジェクト (PHP 4のみ)</li>
<li>特別な値 NULL (値がセットされていない変数を含む)</li>
<li>空のタグから作成された SimpleXML オブジェクト</li>
</ul>
<h4>==と===</h4>
<p>==/!=といった比較演算子では、数値・文字列の自動変換が行われます。よって意図しない結果をもたらす場合があります。</p>
<?php
var_dump(1 == 1); // true
var_dump(1 == '1'); // true
var_dump(0 == 'a'); // true
var_dump(100 == '100a'); // true
var_dump('+1' == '1.0'); // true
[/php]
<p>こういった場合、===/!==を使うと変数の型も厳密に比較することができます。</p>
<?php
var_dump(1 === 1); // true
var_dump(1 === '1'); // false
var_dump(0 === '0'); // false
var_dump(100 === '100a'); // false
var_dump('+1' === '1.0'); // false
[/php]
<h4>変数が定義されているかどうか</h4>
<p>変数が定義されているかどうかを調べるにはisset関数を使用します。定義されている場合はtrueが返ります。ただしisset関数では変数の値がNULLの場合もfalseが返ります。</p>
<?php
isset($a);
[/php]
<h4>コマンドライン引数</h4>
<p>コマンドライン引数を受け取るには$argv変数を使用します。</p>
<?php
var_dump($argv);
[/php]
<h4>array_map</h4>
<p>array_map関数を使うと、連想配列の各要素に処理をして新たな連想配列として受け取ることができます。</p>
<?php
$array = array(1,2,3);
$mapped = array_map(create_function('$v', 'return $v *= 10;'), $array); 
[/php]
<h4>array_filter</h4>
<p>array_filter関数を使うと、条件に一致した要素のみを新たな連想配列として受け取ることができます。</p>
<?php
$array = array(1,2,3,4);
$filtered = array_filter($array, create_function('$v', 'return ($v > 2);'); 
				複数の変数への代入
<?php
list($v1, $v2, $v3) = array(1, 2, 3);
[/php]
<h4>php.ini</h4>
<p>PHPには設定ファイルがあります。設定に応じて挙動が変わるので注意が必要です。この設定はphp.iniという設定ファイルの他に、httpd.conf、.htaccess、そしてソースコードにて設定が可能です。</p>
<p>設定方法は、項目に応じて変わりますが、ソースコードで設定を行う際はini_set()を使うことが多いです。</p>
<?php
ini_set('include_path', '.:/path/to/libs'); // include_pathに'.:/path/to/libs'を設定する
[/php]
<p>現在の設定は、phpinfo関数もしくはphpコマンドで確認できます。</p>
<?php
phpinfo();
[/php]
<pre class="code">
# 全ての設定値を出力
$ php -i
# grep で絞る
$ php -i | grep include_path
</pre>
<h4>クラス定義</h4>
<p>classでクラスを定義できます。</p>
class User {
  protected $name = null;
  
  public function __construct($name) {
    $this->name = $name;
  }
  public function hello() {
    printf("%s: Hello!\n", $this->name);
  }
}
$user = new User('Mike');
$user->hello();
				継承もできます。単一継承のみ可能です。
class MyUser extends User {
}
				例外
throwで例外を投げることができます。try/catchで例外をキャッチします。他の言語にあるfinallyに相当するものはありません。
function foo() {
  throw new Exception();
}
try {
  foo();
} catch (Exception $e) {
  echo $e->getTraceAsString();
}
				PHP参考資料
公式マニュアル
PHPに関する書籍は多く出版されていますが、やはり一番参考になるのは公式マニュアルです。
公式マニュアルを使う際にちょっとしたTIpsを。
ブラウザで公式マニュアルを開く際は、http://php.net/の後ろに調べた関数名を入力すると直接そのページが開きます。合致するものがなければ類似するキーワードが一番表示され、候補の中から選択することもできます。
http://php.net/array
コーディング規約
コーディング規約にはいくつか流派があるのですが、Zend Frameworkのコーディング規約が参考になるでしょう。
Zend Framework PHP 標準コーディング規約 – Zend Framework Manual
モダンPHP
PHPにはオブジェクト指向言語としても機能があります。以下の資料が参考になります。
モダンPHP勉強会を開催しました & 資料 – 肉とご飯と甘いもの @ sotarok
フレームワーク
PHPを使ったWebシステム開発ではフレームワークを用いることがメジャーになりつつあります。
多くのオープンソースフレームワークがありますが、主要なものは以下です。
コメント (Close):2
- 名無し 11-03-03 (木) 10:42
- 
							文章は削除してしまったんですか? 
 見れないのですが。。。
- shinbara 11-03-03 (木) 10:49
- 
							プラグイン入れた影響で本文が見えなくなってました。。。 
 プラグインを無効化したので表示されてると思います。ご連絡ありがとうございました! 
トラックバック:32
- このエントリーのトラックバックURL
- /blog/2010/01/php-basic-syntax.html/trackback
- Listed below are links to weblogs that reference
- PHP基礎文法最速マスター from Shin x blog
- pingback from PHP基礎文法最速マスター | Shin x blog « とっても! ちゅどん(雑記帳) 10-01-27 (水) 18:15
- 
							[…] PHP基礎文法最速マスター | Shin x blog PHP基礎文法最速マスター | Shin x blog […] 
- trackback from Absolute Playing! 10-01-28 (木) 10:52
- 
							[php]PHP基礎文法最速マスターの補足… id:shin1x1 さんがPerl、Rubyに続いてPHP基礎文法最速マスター | Shin x blogで基礎文法をまとめてくれています。ありがとうございます。空いた時間で書いてみようかなと思っていたら先越されてしまいました。 記事を読んでみてコードブロックの説明を最初読んだときに少し… 
- pingback from PHP基礎文法最速マスター « さとらんプランニング 10-01-29 (金) 12:49
- 
							[…] PHP基礎文法最速マスター | Shin x blog […] 
- pingback from LL基礎文法最速マスターのまとめ – 考える人たち 10-01-29 (金) 17:49
- 
							[…] PHP基礎文法最速マスター | Shin x blog […] 
- pingback from LL基礎文法最速マスターのまとめ(2) - 増田の杜β 10-01-29 (金) 19:56
- 
							[…] PHP基礎文法最速マスター | Shin x blog […] 
- trackback from 医者を志す妻を応援する夫の日記 10-01-30 (土) 18:05
- 
							[プログラミング]Brainf*ck基礎文法最速マスター… 各種プログラミング言語の基礎文法最速マスターの記事を、忠実にBrainf*ckに置き換えました。 Perl基礎文法最速マスター – Perl入門〜サンプルコードによるPerl入門〜 Route 477 – Ruby基礎文法最速マスター – , 1. 基礎 , 2. 数値 , 3. 文字列 , 4. 配列 , 5. ハッシュ , 6… 
- pingback from ITキヲスク | 2010年1/24~1/30の週間ブックマーク 10-01-31 (日) 5:46
- 
							[…] PHP基礎文法最速マスター […] 
- pingback from [リンク] links for 2010/1/31 « Bonnie styles. 10-01-31 (日) 20:55
- 
							[…] webdesignPHP基礎文法最速マスター | Shin x blog […] 
- pingback from 今週の管理人Bookmark (1/24-1/31) - ElectricBrain Standard 10-01-31 (日) 23:56
- 
							[…] PHP基礎文法最速マスター | Shin x blog […] 
- pingback from links for 2010-02-01 | ウェブル 10-02-02 (火) 5:03
- 
							[…] PHP基礎文法最速マスター | Shin x blog (tags: プログラミング) […] 
- pingback from [つ]GoogleもIE6に見切りをつけました。 | Kechol 10-02-02 (火) 20:42
- 
							[…] – なんとなく日記やPHP基礎文法最速マスター | Shin x blogあたりですかね。 […] 
- pingback from ITキヲスク | CSS基礎文法最速マスター 10-02-04 (木) 13:59
- 
							[…] PHP […] 
- pingback from [2010/02/06]ブックマークまとめ « Hyhy's Weblog 10-02-06 (土) 22:04
- 
							[…] for PHP」をFacebookが公開 OpenLaszloで DHTML(Ajax)コンテンツの作成 PHP基礎文法最速マスター […] 
- trackback from 泥のように 10-02-07 (日) 16:20
- 
							PHP変態文法最速マスター… PHP基礎文法最速マスター | Shin x blogより。 変態文法ならもう少しいろいろあると思うので、まとめてみました。ただ、ほとんどがPHPに限らない話かも。。。 この記事はPHP 5.2.12 (cli) で動作確認してます。5.3の文法は他をあたってください。5.3専用フレームワークなどを….. 
- pingback from 基礎文法最速マスター » Post Topic » 三愛企画ブログ 10-02-09 (火) 14:16
- 
							[…] 3.0 Bash C# CSS D言語 Diksam Emacs Lisp Erlang Haskell Javascript JQuery Java Lua Objective-C PHP Perl Python PostScript Ruby VBA VBScript Vimスクリプト vimrc […] 
- pingback from コーディングしたい – まんぽいの裏路地 10-07-11 (日) 10:44
- 
							[…] …… apache, MySQL, PHP環境をさくっと構築。というか出来合のもの。 ・PHP基礎文法最速マスター […] 
- pingback from PHPの勉強に役立ちそうなホームページのリンク « WEB知識のメモ帳 10-07-13 (火) 8:46
- 
							[…] PHP基礎文法最速マスター カテゴリー:PHP, リンク ← Web制作で必要になる50のルール(要約) CakePHPでPDFを作成するのにTCPDFを使用する → 会話をスタート […] 
- pingback from 各種プログラミング言語の基本サイトをまとめる | アイビースター 11-03-31 (木) 9:02
- 
							[…] PHP基礎文法 […] 
- pingback from 短期間でプログラミング言語を覚えるのに役に立ちそうなサイトまとめ | wordpress reblog 11-03-31 (木) 23:57
- 
							[…] PHP基礎文法:http://www.1×1.jp/blog/2010/01/php-basic-syntax.html […] 
- pingback from [プログラミング]短期間でプログラミング言語を覚えるのに役に立ちそうなサイトを教えてください » Gozaru de 5zaru* 11-08-25 (木) 19:55
- 
							[…] プログラミング基礎: HTMLの基本: CSS基礎文法: PHP基礎文法: D言語基礎文法: C#基礎文法: C++0x基礎文法: Java基礎文法: […] 
- pingback from キャベツはおかわり自由です! » どっかのまとめ 11-08-26 (金) 17:49
- 
							[…] PHP基礎文法:http://www.1×1.jp/blog/2010/01/php-basic-syntax.html […] 
- pingback from [初心者用] 各プログラミング言語を1から学べる基礎入門講座まとめ | 世界ろぐ 12-07-09 (月) 16:38
- 
							[…] 思いついたデザインを実現可能にするために学んでおきたいですね。 PHP基礎文法最速マスター Word Pressなどでも常に使われているので […] 
- pingback from PHPでWebアプリ開発 | TIL: 13-01-06 (日) 14:23
- 
							[…] PHP基礎文法最速マスター […] 
- pingback from 短期間でプログラミング言語を覚えるのに役に立ちそうなサイトまとめ | 中途半端を極める 13-01-13 (日) 22:03
- 
							[…] PHP基礎文法:http://www.1×1.jp/blog/2010/01/php-basic-syntax.html […] 
- pingback from あなたの知らない新卒教育の世界 | Sloth Library 13-06-02 (日) 15:22
- 
							[…] PHP基礎文法最速マスター – Shin x blog6623 PHP The Right Way448567 すぐれた PHP ライブラリとリソース27123 […] 
- pingback from 【資格】PHP5技術者認定初級試験に合格しました【受験】 | はいみっくすわーるど 13-06-18 (火) 11:55
- 
							[…] ・PHP基礎文法最速マスター:時間がない方も安心の基礎文法をまとめてあるサイト。 […] 
- pingback from プログラミング参考サイト | android manifest configChanges 13-12-20 (金) 3:43
- 
							[…] PHP基礎文法最速マスター […] 
- pingback from 【初心者向け】最速でphpを学ぶための厳選記事集 | いい勉強するWEBサイト 15-09-24 (木) 0:54
- 
							[…] PHP基礎文法最速マスター – Shin x blog […] 
- pingback from 高速でプログラミング言語をマスターするのに有効な記事まとめ | ひまひまテストー 16-03-25 (金) 12:26
- 
							[…] PHP基礎文法最速マスター […] 
- pingback from 短期間でプログラミング言語を覚えるのに役に立ちそうなサイトまとめ | 暇つぶし速報 16-03-25 (金) 13:21
- 
							[…] PHP基礎文法:http://www.1×1.jp/blog/2010/01/php-basic-syntax.html […] 
- pingback from 高速でプログラミング言語をマスターするのに有効な記事まとめ | 暇つぶし速報 16-03-25 (金) 13:22
- 
							[…] PHP基礎文法最速マスター […] 
- pingback from 短期間でプログラミング言語を覚えるのに役に立ちそうなサイトまとめ | ひまひまテストー 16-03-25 (金) 14:31
- 
							[…] PHP基礎文法:http://www.1×1.jp/blog/2010/01/php-basic-syntax.html […] 



