LoginSignup
16
6

More than 5 years have passed since last update.

PHP5技術者認定試験(上級)に学ぶ、文字列との和解(2)

Last updated at Posted at 2017-06-20

PHP5技術者認定試験(上級)

資格試験に向けて勉強中です
勉強していて、PHPについて実は知らなかった/勘違いしていたことを記載します。

文字列

変数の展開

  • ダブルクオーテーション " で括られた文字列内では変数・エスケープシーケンスが展開される
    • 変数展開時は "my name is {$fullname}desu" のように波括弧で括るのが無難
  • シングルクォーテーション ' は展開されない

ヒアドキュメント

  • 通常のヒアドキュメント
    • 書き方を忘れがち
    • EOSは 終端ID と呼ばれる
    • 終端IDの前後にスペース、コメントなどを記載してはいけない
$string  = <<<EOS
6月20日 {$schedule}
EOS; 
  • Nowdoc (PHP5.3~)
    • EOSをシングルクォートで括る
    • 変数が展開されない
$string  = <<<'EOS'
6月20日 {$schedule}
EOS; 

出力

echo, print()

  • echo と print() は構造言語
  • echo は複数の引数をカンマ , 区切りで記述できる -- その場合括弧で括ってはいけない
echo $date, $schedule  ;
echo ( $date, $schedule ) ; // これはエラー
  • print() は出力に成功した場合 true を返す

print_r(), var_dump

  • var_dump
    • , で区切って複数の値を出力できる
    • 自分自身の参照を含むオブジェクト( $GLOBALS など )も出力可能
    • その際 *RECURSION* と表示される

操作

trim( $str [ $charlist ] ), ltrim( $str [ $charlist ] ), rtrim( $str [ $charlist ] )

  • 2パラ $charlist は string
  • デフォルトの除去文字は以下
    • 空白, タブ, 改行, キャリッジリターン, NULLバイト, 垂直タブ

他の操作関数

関数名 機能
strtolower( $str ) 小文字変換
strtoupper( $str ) 大文字変換
ucfirst( $str ) 先頭を大文字変換
ucwords( $str ) 各単語の先頭を大文字変換
substr( $str , $start ,[ $length ] ) 文字を抜き出す
substr_count( $heystack , $needle ) needleキーワードが何回出現するか
substr_replace( $str1 , $str2 , $index , $len ) $str1$index 位置から $len 分の文字を$str2 に置換
strrev( $str ) 逆から読む
str_repeat( $str , $cnt ) $str$cnt 回繰り返した文字列を取得
str_pad( $str , $len , $pad = " " ) $str$len 文字に達するまで、右に $padを付加

エンティティ

エンティティ変換

  • HTMLで意味を持つ文字をエスケープすることを エンティティ といいます。
    • 例: & -> &amp;
関数名 機能 comment
htmlentities( $str ) HTML特殊文字・ほか一部を、エンティティに変換 よくタイポされる
htmlspecialchars( $str ) HTML特殊文字を、エンティティに変換 上とほぼ同機能の関数
  • ほか一部: アクセント記号、ウムラウト付き文字

他の操作関数

関数名 機能
strip_tags( $str ) HTMLタグ・コメント、PHPタグを取り除く
get_meta_tags( $filename ) 対処ファイルのHTMLメタタグを連想配列で取得

エンコード・エスケープ

関数名 機能
urlencode( $str ) URLエンコード(クエリ文字列・クッキー値形式)
urldecode( $str ) 上記をデコード
rawurlencode( $str ) URLエンコード(RFC3986形式)
rawurldecode( $str ) 上記をデコード
addslashes( $str ) SQL用のエンコード 使うべきではない
stripslashes( $str ) 上記をデコード
  • addslashes()は 殆どのRDBMSで不向き。RDBMSに合わせたエスケープをしよう!

比較

  • ==, === どちらも 大文字小文字の区別を行う
  • <<= 演算子での比較は、辞書順での比較を行う
関数名 機能
strcmp( $str1 , $str2 ) 辞書順で比較
strnatcmp( $str1 , $str2 ) 自然順で比較

分解・結合

関数名 機能
explode( $demiliter , $str ) 区切り文字で分割した配列を取得
implode( $glue ,(array) $pieces ) 複数の文字列を結合
join( $glue ,(array) $pieces ) implodeのエイリアス
strtok( $str , $token ) $token で区切ったトークンを取得 、見つからない→ false
sscanf( $str , $format ) フォーマットに応じた値を読み取り、戻り値は配列
parce_url( $url ) URLを分割、戻り値は ["scheme"=>"http", "host"=>"qiita.com", "path" => "/mypage"]
  • tokenはここではまとめきれない、使って覚える

検索

関数名 機能
strpos( $str , $keyword ) 検索文字列が最初に現れる位置を返す、見つからない→ false
strrpos( $str , $keyword ) 検索文字列が最後に現れる位置を返す、見つからない→ false
strstr( $str , $keyword ) 検索文字列から末尾までの文字列を返す
strchr( $str , $keyword ) 検索文字列から末尾までの文字列を返す(上と同じ)
stristr( $str , $keyword ) 検索文字列から末尾までの文字列を返す(大文字小文字を無視(i))
strrstr( $str , $keyword ) 検索文字列が最後に現れる位置から末尾までの文字列を返す
strspn( $str , $mask ) $mask の文字のみで構成される部分が何文字あるか
strcspn( $str , $mask ) $mask の以外文字のみで構成される部分が何文字あるか

終わりに

PHPよ、文字列関数の命名規則はどうにかならんかったのか

いいね!してくれると勉強が捗ります

16
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
16
6