[Java] 既存のクラスを(擬似的に)拡張したい

サブクラスしか持っていないメソッド

Javaでサブクラスがスーパークラスが持っていないメソッドを持っているときに統一的に取り扱おうとすると面倒なことが多い。
本来はサブクラス側を直した方がいいのかもしれないけど、既存のクラスでこちらが修正できない場合も多々ある。

例えば、SQLExceptionはExceptionが持っているgetMessageだけではなく、getErrorCodeやgetSQLStateを持っているけど、これらを統一的にログに出力したかったりする。

[PHP] PHPオブジェクトと配列の変換まとめ

ファイルから読み込んだ値をオブジェクトにしたり、逆に外部に渡したい時にはオブジェクトのプロパティを連想配列にしたい場合は結構ある。
DBの場合はPDOなどフレームワークがやってくれることも多いけど、自分でやりたい場合はどうすればいいか。

配列からオブジェクトを生成する

新しくオブジェクトを作りたい場合は配列をobject型にキャストするだけ。
$obj = (object)[ 'foo' => 'orange', 'bar' => 'green' ];
var_dump($obj);

[MySQL] MySQLのキーワード、予約語

MySQLの予約語?

SQLでは基本的に予約語をテーブル名やカラム名に使うことはできない。

MySQL 5.6 9.3 予約語
https://dev.mysql.com/doc/refman/5.6/ja/reserved-words.html

"IN"や"FROM"をカラム名に使うことはないと思うけど、"RANGE"とか"REPEAT"とか"SEPARATOR"なんかは使ってしまいそうな気がする。

例えば、カラム名に"repeat"を使ってテーブルを作成しようとすると以下のようになる。

[PHP] PHPで複数配列のループ

PHPで複数の配列を同時にループするときにarray_mapを使うといいみたい。
例えば、こんな。
$arr1 = [ 1, 2, 3 ];
$arr2 = [ 4, 5, 6 ];

foreach (array_map(NULL, $arr1, $arr2) as [ $a, $b ]) {
    echo ($a * $b) . PHP_EOL;
}

[PHP] PHPでExcel処理

PHPSpreadSheet

PHPからExcelファイルの読み書きをするには、PHPExcelの後継となっているPHPSpreadSheetを使うのが一般的だろうか。

https://phpspreadsheet.readthedocs.io/en/develop/

PHPSpreadSheetを使って、Excelファイルを読み込んで、CSVファイルに書き出す簡単な例は以下のようになる。

excel_test.php
<?php

require 'vendor/autoload.php';

use PhpOffice\PhpSpreadsheet\Reader\Xlsx as Reader;
use PhpOffice\PhpSpreadsheet\Shared\Date;

$reader = new Reader();
$spreadsheet = $reader->load('test.xlsx');

$sheet = $spreadsheet->getSheetByName('Sheet1');

$highest =  $sheet->getHighestRow();
for ($i = 1; $i <= $highest; $i++) {
  echo $sheet->getCellByColumnAndRow(1, $i)->getValue() . ",";
  echo $sheet->getCellByColumnAndRow(2, $i)->getValue() . ",";
  echo $sheet->getCellByColumnAndRow(3, $i)->getValue() . ",";
  echo (Date::excelToDateTimeObject($sheet->getCellByColumnAndRow(4, $i)->getValue())->format('Y-m-d H:i:s')) . PHP_EOL;
}

[PHP] Embed SAPIでCからPHPを呼び出してみる その3

[PHP] Embed SAPIでCからPHPを呼び出してみる その2では、zend_eval_stringlを使って、文字列をPHPスクリプトとして解釈、実行してみた。
今度は定義済みのPHP関数をCから呼び出してみよう。

※今回も同様に、Linux上で、PHP 7.1.1を使った例。

全体

CからPHPの定義済み関数を呼び出すにはcall_user_functionを使う。

[PHP] Embed SAPIでCからPHPを呼び出してみる その2

[PHP] Embed SAPIでCからPHPを呼び出してみる その1では、PHPのファイルパスをSAPIに渡すことによって、PHPスクリプトをCから実行してみた。
今度はPHPファイルを介さずに直接、文字列をPHPスクリプトとして実行してみよう。

※今回も同様に、Linux上で、PHP 7.1.1を使った例。

eval

PHPの関数に文字列をそのままPHPスクリプトとして解釈するevalという関数があるけど、それと同じようにCから文字列をevalするにはzend_eval_stringlを使う。

例えば、"2 + 3;"をPHPスクリプトとして解釈、実行させるには以下のようにする。