をしようと思ったのですの。

前に書いたように、ラムダというか匿名関数自体は使えるし、それを投げることも出来るのですの。なのでいけるかなと思ったのですの。

でも、クラスメソッドとして書いた関数は、匿名関数のように投げ回すことが出来ないようなのですの。ふべん。

代わりにこう↓かけたらいいなと、

class Foo{
 $bar = function (){
  return ~~~;
 };
}

思ったのですけどダメで、、

PHP:プロパティ
http://php.net/manual/ja/language.oop5.properties.php
宣言時に初期値を設定することもできますが、初期値は定数値でなければなりません。
ということで、
こう↓するしかないみたいですの。

class Foo{
 public $bar;
 function __construct(){
  $bar =  function (){
   return ~~~;
  };
 }
}

でもこの方法だと、関数をたくさん並べたときに宣言と定義の位置が離れて見づらくなるので嫌なのですの、、

なんとか良い感じに書ける方法があればいいのですけど、、


--2018/12/24 追記
メンバ変数の宣言時に関数を代入出来ないのなら、メンバ変数の宣言をコンストラクタ内に持ってくればいいじゃないですの!

class Foo{
 function __construct(){
  $this->bar = function (){
   return ~~~;
  };
 }
}

一応これは成功しましたの。さすがPHPですの。
ただ、ここでもう一つ問題がわかって。メンバ変数に関数を入れた場合、それを呼び出すときに普通のクラスメソッドのようには呼び出せないそうなのですの。

【PHP】プロパティに格納されたクロージャを呼び出す方法まとめ
https://qiita.com/rhap/items/1701247844772c3c92f0

なぜそんな意地悪を。。

ということで、ここで心が折れましたの。
自由に投げられるクラスメソッドが欲しくて調べはじめたので、普通のクラスメソッドとして扱えなくなってしまうようだと厳しいですの。

しかも、一番簡単そうな「括弧でくくる」方法は、PHP5.4では使えないようですの。いったんローカル変数に入れて呼び出す方法なら出来たのですけど、これはちょっと嫌ですの。

↓これはNGで
    /*
     * @dataProvider forNantoka
     */

↓これだと動くみたいですの
    /**
     * @dataProvider forNantoka
     */

上段のアスタリスクに注目ですの。

/*~*/は通常のブロックコメントで、
/**~*/はドキュメンテーションブロックという、アノテーションを書くための特殊なブロックだそうですの。

@dataProvider もアノテーションの一つなので、ドキュメンテーションブロックで書かないと動かないということですの。


PHPUnit data provider error
https://stackoverflow.com/questions/14426208/phpunit-data-provider-error

2. アノテーション
https://phpunit.readthedocs.io/ja/latest/annotations.html

2日ほど頭を抱えていたのがやっと動いたのでメモですの。

Windows環境
NetBeans8.2(PHP用)
XAMPP1.8.2(PHP5.4.31)

・ツール>オプション>一般 の設定
 PHP5インタプリタ
  xampp/php/php.exe

・ツール>オプション>フレームワークおよびツール>PHPUnit の設定
 PHPUnitスクリプト
  xampp/php/phpunit.bat

 スケルトン・ジェネレータ・スクリプト
  DLしたpharファイルをおいた場所を指定(たぶんどこでも良い)

・プロジェクト・プロパティ(プロジェクトを右クリック>プロパティ) の設定
 テスト>PHPUnit
  ブートストラップの使用 にチェックを入れ、「生成」ボタンを押す

・xDebugの設定(コードカバレッジを取るのに必要)
 xamppのphp.iniの最後のほうの[XDebug]の欄のコメントアウトをすべて外して、xamppのapacheを再起動する