print 'Hello World!';

hogehoge備忘録

extract関数

連想配列に含まれるキーを変数名、値をその変数の値として新しい変数を作成する

#使用例

$fruits = array('apple'=>'赤','melon'=>'緑','banana'=>'黄');
extract($fruits);

#実行結果

$apple= '赤';
$melon= '緑';
$banana= '黄';

#その他

作成されようとしている新しい変数が既に存在していたり、キーに変数名として無効な値が使われていた場合などの処理については、2番目の引数で指定する。
値を省略した場合は「EXTR_OVERWRITE」となり、変数が既に存在する場合、存在する変数が上書きされる。

第3引数にプレフィックス(接頭辞)を付けることができる。
例えば変数名が「$abc」、プレフィックスが「'pre'」だった場合、新しい変数名は「$pre_abc」となる。

array_column関数

指定した配列から新たな配列をつくることができる。
DBから取得したデータとかの処理に役立つ。(PHP5.5以降)

[使用例]
操作する配列は以下のとおり

$article = array(
    array(
        'id' => '001',
        'title' => 'スポーツ観戦',
        'category' => 'スポーツ'
    ),
    array(
        'id' => '002',
        'title' => 'おすすめのスイーツ',
        'category' => 'フード'
    ),
    array(
        'id' => '003',
        'title' => '好きなテレビ番組',
        'category' => 'テレビ'
    )
);

第2引数に対象の連想配列($article)のキーを指定すると、キーの一覧を配列で取得できる

array_column($article, 'title');

// タイトル一覧
// array(
//     'スポーツ観戦',
//     'おすすめのスイーツ',
//     '好きなテレビ番組'
// )

第3引数を指定すると、その要素を結果の連想配列のキーにできる

array_column($article, 'title', 'id');

// category => titleの連想配列
// array(
//     '001'=> 'スポーツ観戦',
//     '002'=> 'おすすめのスイーツ',
//     '003'=> '好きなテレビ番組'
// )

第2引数をnullにすると、第3引数をキーに行がそのままフィールドになる

array_column($article, null, 'id');

// category => titleの連想配列
// array(
// '001'=> array('id'=>'001', 'title'=>'スポーツ観戦', 'category'=>'スポーツ'),
// '002'=> array('id'=>'002', 'title'=>'おすすめのスイーツ', 'category'=>'フード'),
// '003'=> array('id'=>'003', 'title'=>'好きなテレビ番組', 'category'=>'テレビ')
// )

例外をキャッチする try~catch

スローされた例外はどこでキャッチされるのか?
以下のサンプルコードをもとに解説

#サンプルコード

class A

try{
    //クラスBのメソッドbを実行
  //a①
} catch (ErrorException1 $e) {
    //a②
} catch (ErrorException2 $e) {
    //a③
}
    //a④

class B

function b() {

//b①

try{
    //b②
} catch (ErrorException1 $e) {
    //b③
} catch (ErrorException2 $e) {
    //b④
}

//b⑤

}

b①でErrorException1、もしくはErrorException2が発生した場合
a①、もしくはa②が実行され、a③の処理に続く。

b②でErrorException1、もしくはErrorException2が発生した場合
b③、もしくはb④が実行され、b⑤の処理が行われ、a④へと続く。

例外処理とエラーログ出力

#ポイント

どのような例外処理、ログを出力するかは、トラブル(システムエラーやDB接続、DB更新の失敗など)が発生したときにどのようなログがあれば運用対応上適切かを考えるとよい。

#ログを出力して例外をスロー

Utilクラス

//exitErrorメソッド
public static function exitError($errNumber, $errDetail, $context){
	//ログ出力
	Logger::errorWithContext($errNumber, $errDetail, $context);
	//例外をスロー
	throw new HogeException(Logger::getMessage($errNumber).$errDetail, $errNumber);
}

Loggerクラス

//エラーコード
const ERR_CODE_9000='9000'; 
const ERR_CODE_9001='9001';

//エラーコード表(エラーコード=>エラーメッセージ)
const ERRTABLE=[
	self::ERR_CODE_9000=>'bad request',
	self::ERR_CODE_9001=>'system error'
];

//errorWithContextメソッド
public static function errorWithContext($errCode, $options, array $context){
	//ララベルでのログ出力方法
	Log::error(static::errMes($errCode, $options), $context);
}

//getMessageメソッド
public static function getMessage($errCode){
	return self::ERRTABLE[$errCode];
}

//errMesメソッド
public static function errMes($errCode, $options){
	$errMes= '['.$errCode.'] '.ERRTABLE[$errCode];
	if(is_array($options)){
		foreach($key=>$value){
			$optionAry[]=$key. ':'.$value;
		}
		$options= implode(',',$optionAry);
	}
	$errMes .= '('.$options.')';
	return $errMes;
}

#実装例

Util::exitError(Logger::ERR_CODE_9000, '(parameter:'.$param.')', ['file'=>__FILE__, 'line'=>__LINE__]);

try{
	//何らかのメソッドを実行
	$response=$logic->execute();
} catch(HogeException $e){
	//実行の結果、スローされたHogeExceptionをキャッチ
	$response['FAULT_CODE']= $e->getCode();
	$response['FAULT_STRING']= $e->getMessage();
}

//$responseをjson形式で返す場合
return json_encode($response);

#ログ出力例

[2016-12-13 10:42:02][ERROR]:[3000] No data exists.(ID:001) {file:~,line:~}

ERROR:エラーログレベル
3000:エラーコード
No data exists. (ID:001):エラーメッセージと付加情報
{file:~,line:~}:コンテクスト

#ララベルログ出力参考サイト

[Laravel]Laravel5.1のログ出力に関して調査したまとめ - Qiita

Eclipse フォーマッターと保管アクションの設定

PHPにコードスタイル「PSR-2」を適用する

[ウィンドウ]-[設定]-[PHP]-[コード・スタイル]-[フォーマッター]
アクティブなプロファイルから「PSR-2」を選択し、「適用」する

#ファイル保存時にコードスタイルを適用する

[ウィンドウ]-[設定]-[PHP]-[エディター]-[保管アクション]
「ソース・コードのフォーマット」にチェックする

CSSフレームワーク Bootstrap

#Bootstrapとは

Bootstrapは、米ツイッターが開発・提供している、HTML5・CSS3・jQueryを使用したフロントエンドツール

Bootstrap

主な特徴

  • 洗練・統一されたデザインを素早く適用できる
  • レスポンシブWebデザイン対応
  • カスタマイズも簡単

#導入方法・使い方

以下のサイトを参考に

ASCII.jp:いまさら聞けない「Twitter Bootstrap」とは? (1/2)|Webサービス開発者のためのTwitter Bootstrap入門

HTML5アプリ作ろうぜ!(11):Webデザイン初心者でもできる、Bootstrapの使い方超入門 (1/4) - @IT