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

[Java,JNI]JNIでクラス検索するときのパッケージ名 では、CからJVMを起動してみたけど、今度はCからPHPを呼び出してみよう。

Linux上で、PHP 7.1.1を使った例。

Embed SAPI

Cから直接PHPを呼び出すためにはEmbed SAPIを使う。
SAPIというのはServer APIと呼ばれるもので、実際にPHPのスクリプトを解釈する部分と実行環境の橋渡しをする。
PHPスクリプトがWebサーバから呼び出されたり、コマンドラインから呼び出されたりすると、SAPIが異なる状態で、呼び出されることになる。

http://php.net/manual/ja/function.php-sapi-name.php

[PHP] 遅延静的束縛

Pythonでは

[Python] classメソッドとstaticメソッドでは、Pythonでのclassメソッドとstaticメソッドを見た。

同じようなことがPHPでもできないだろうか。

PHPでは

PHPでは、遅延静的束縛なんていう仰々しい名前の機能で、これに近いことができる。

http://php.net/manual/ja/language.oop5.late-static-bindings.php

Pythonの場合はメソッド自体をclassメソッドにしたり、staticメソッドにしたりしたけど、PHPでは静的コンテキストでクラスを参照する時にself::とstatic::を使い分ける。

[PHP] PHPでの日付文字列パースと要素取り出し

PHPで日付文字列をパースして、そこから曜日を算出する必要があった。
こんなの簡単だろと思ってたんだけど、いくつか気をつける点があったので、メモ。

strptime

まずはstrptimeを使って、こんな感じにした。
$d = (strptime("20180507", "%Y%m%d"));
var_dump($d);

[Java] SQLExceptionのgetNextExceptionとiteratorの違い

SQLExceptionを補足した時にチェーンされた例外

SQLExceptionを補足した時にチェーンされた例外をすべて見たかったんだけど、getNextExceptionで戻り値がnullになるまでループするのと、iteratorでループするのでは取得される例外が異なるみたい。

https://docs.oracle.com/javase/jp/8/docs/api/java/sql/SQLException.html
        ...
    } catch (SQLException e) {
        for (Throwable t : e) {
            ...
        }
    }
        ...
    } catch (SQLException e) {
        for (SQLException sqle = e; sqle != null; sqle = sqle.getNextException()) {
            ...
        }
    }

[R] データフレームをグルーピングして、sum,max 〜aggregate編

by関数の出力

データフレームをグルーピングして、sum,max 〜by関数編では、by関数を使って、データフレーム内の特定のカラムをキーとしたグループでsumやmaxを算出した。
これはこれでもいいんだけど、by関数の出力はグループ毎のリストになるので、場合によっては出力が使いずらい。

グルーピングのキーも行方向に持っていって、出力もデータフレームにするにはどうしたらいいだろうか。