PHPに入門
PHPについて学ぶぞ。
まずEmacsに
「PHP開発で追加しておきたいEmacs Lisp 8選」http://blog.asial.co.jp/190
を追加して、スタートだ。
最初
文法をまず知る。
コマンドラインで動かすぞ。
最初のスクリプトは?
HelloWorldじゃなくて、これだ。
test20.php
<?php phpinfo();
itouhiro@www765 ~> php test20.php | less ... _ENV["LC_CTYPE"] => C _ENV["_"] => /usr/local/bin/php
コマンドラインでは、'<?php' は書くけど、'?>'は書かないほうがよい。
「Modern PHP Programming 入門 @ PFI 社内セミナー14」 http://d.hatena.ne.jp/sotarok/20091126/modern_php_programming_at_pfi
を参照。
ほかの言語との違いが手っ取り早く わかる
http://d.hatena.ne.jp/kwatch/20091129/1259455757
PHP 文法
コメント
// と # と /* */ が使える。
PEARのコーディング規約では、 # は使わないらしいぞ。
定数
<?php define('MSG', '定数だー'); print MSG . "!\n"; var_dump(MSG); printf("file %s, line %s\n", __FILE__, __LINE__); → 定数だー! string(12) "定数だー" file /home/itouhiro/test23.php, line 5
PHP 変数
PHPの変数には以下がある。
- スカラー型
- boolean
TRUE と FALSE がある。FALSE判定されるのは…… int 0, float 0.0, ''(空文字列), '0'(文字列のゼロ), カラ配列, カラオブジェクト, NULL - integer
32bit signed。 「012」は8進数。「0xff」は16進数。 - 浮動小数(float)
- string
single quote ( \' 以外は文字列), double quote (EscapeSequence使える、変数展開), here document(EscSeq使える、変数展開、'<'3つ)
- boolean
- 複合型
- 配列
- オブジェクト
- 特殊型
- リソース (FileObject, DatabaseObject)
- NULL
here document
$s = "PHP"; print <<<EOB \thello, $s! EOB;
数値の暗黙キャスト
<?php $a = 10 + '15歳の地図'; print $a . "\n"; → 25 (文字列を15という数値に変換)
PHP Array
PHPの配列についてまず、学ぼう。
<?php <?php $a = array('実践マスターPHP+MySQL―PHP4/PHP5対応', '先輩に聞くPHPの素朴なギモン\ ', 'PHP逆引きクイックリファレンス'); $a[] = 'PHPによるWebアプリケーションスーパーサンプル 第2版'; #追加 unset($a[1]); #削除 $a[2] = NULL; #削除 if (! isset($a[1])) {print "\$a[1] is not set\n";} if (! isset($a[2])) {print "\$a[2] is not set\n";} echo "\$a:" . $a . "\n"; print_r($a); $b = array('uk'=>'United Kingdom', 'tv'=>'Tuvalu', 'jp'=>'Japan'); $b['ca'] = 'Canada'; #追加 unset($b['tv']); #削除 print $b['uk'] . "\n"; var_dump($b);
結果は
$a[1] is not set $a[2] is not set $a:Array Array ( [0] => 実践マスターPHP+MySQL―PHP4/PHP5対応 [2] => [3] => PHPによるWebアプリケーションスーパーサンプル 第2版 ) United Kingdom array(3) { ["uk"]=> string(14) "United Kingdom" ["jp"]=> string(5) "Japan" ["ca"]=> string(6) "Canada" }
- 文字列結合は '.'。
- print で配列を表示しても 'Array'だけ。
- print_r なら中身も表示してくれる。
- 配列の生成は array()
- 配列の要素数 count(), sizeof()
- 要素の出現回数を計る array_count_values()
- ハッシュの特定valueを持つkeyを求める array_keys()
- ハッシュの特定valueが配列に存在するか array_search(), in_array()
- 配列の差分 array_diff(), array_diff_assoc()
- ハッシュの特定valueすべてを取得 array_values()
- ハッシュの特定valueすべてを結合 join()
- 配列の結合 array_merge(添字番号振り直し)、+演算子(同じ添字番号のvalueは追加しない、同じハッシュキーは追加しない)
- 配列の分割 array_chunk()
- 配列の各要素を処理 array_map(), array_reduce()
PHP 文字列
- 数値にカンマを入れる number_format()
- 文字列前後の空白を削除 trim()
- 文字列の比較 strcmp()
- 文字列の長さを取得 mb_strlen()
- 部分文字列取り出し mb_substr(), mb_strcut(), mb_strimwidth()
- 文字種の変換 mb_convert_case(), mb_convert_kana()
- 文字列置換 preg_replace(), mb_ereg_replace()
- 文字列を配列に分割 explode(), mb_split()
- 文字列の繰り返し str_repeat()
- 特定の文字列を含んでいるか調べる mb_strpos() 見つからないならFALSEを返す、先頭に見つかったら0を返すが、0はif文ではFALSE扱いなので注意)
- 暗号化 crypt(), md5(), sha1(), crc32()
- 文字エンコーディング変換 mb_convert_encoding()
ファイルアクセス
WebサーバにPOSTでデータを送るのが簡単。
「PHPをDisってるブログエントリを集めてみた」http://d.hatena.ne.jp/kwatch/20091126/1259255541
ここでPHPへの批判が集まってる。
一番困るのはphp.iniなんだよ。
これはまったくそう思う。
以下のスクリプトで、php.iniの内容を見ることができるが、php.iniで以下の関数(ini_getとか)をdisable_functionされていると実行できない。
print "\n " . $a . ini_get($a) . "\n"; $a = 'mbstring'; if (extension_loaded($a)) { print "モジュール{$a}はロードされています。\n"; }
<?php print "\n ini_get_all\n"; print_r( ini_get_all() ); print "\n get_loaded_extensions\n"; print_r( get_loaded_extensions() ); $a = "output_handler\n";
- 文字列の中で変数展開するには、'{$var}' とする。Perlやshの '${var}' とは違う。