前に書いたように、ラムダというか匿名関数自体は使えるし、それを投げることも出来るのですの。なのでいけるかなと思ったのですの。
でも、クラスメソッドとして書いた関数は、匿名関数のように投げ回すことが出来ないようなのですの。ふべん。
代わりにこう↓かけたらいいなと、
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では使えないようですの。いったんローカル変数に入れて呼び出す方法なら出来たのですけど、これはちょっと嫌ですの。