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つ)
  • 複合型
    • 配列
    • オブジェクト
  • 特殊型
    • リソース (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()
addslashes()

文字列の以下の文字をエスケープ(以下の文字の前にbackslashを置く)

  • single quote "
  • double quote "
  • backslash \

ファイルアクセス

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}' とは違う。