array_mapを静的メソッドで使用したいのですが失敗します。これが私のコードです:
Class Buy {
public function payAllBills() {
$bill_list = OtherClass::getBillList();
return array_map(array(self, 'pay'), $bill_list); // Issue line
}
private static function pay($bill) {
// Some stuff
return true;
}
}
PHPは私にエラーを与えます:
Use of undefined constant self - assumed 'self'
私も試しました:
return array_map('self::makeBean()', $model_list);
しかし、それは機能しません。
静的メソッドでarray_mapを使用する方法はありますか?
私はすでに読みました: PHP 5.2? でarray_map関数としてメソッドを使用できますか?.
@ mark-bakerの答えを拡張させてください:
別のクラスの静的メソッドを呼び出す場合は、完全な名前空間を引用符で囲む必要があります。
return array_map('Other\namespace\CustomClass::pay', $model_list);
use
ごとのクラスを使用するだけでは不十分です。
// this is not enough:
// use Other\namespace\CustomClass;
return array_map('CustomClass::pay', $model_list); //does not work
PHP 5.6-7.3:
array_map('self::pay'], $bill_list); # works
array_map(['self', 'pay'], $bill_list); # works
array_map('\\Some\\Name\\Space\\SomeClass::method',$array); # works
array_map(['\\Some\\Name\\Space\\SomeClass','method'],$array); # works
use \Some\Name\Space\SomeClass; # alias to local namespace fails:
array_map('SomeClass::method',$array); # fails
array_map(['SomeClass','method'],$array); # fails
指定されたエラーは次のとおりです。
PHP警告:array_map()はパラメータ1が有効なコールバックであると想定しています。クラス 'SomeClass'が見つかりません
use SomeLongClassName as Foo; # alias within namespace fails:
array_map("Foo::method",$array); # fails
array_map(['Foo','method'],$array); # fails
指定されたエラーは次のとおりです。
PHP警告:array_map()はパラメータ1が有効なコールバックであると想定しています。クラス 'Foo'が見つかりません
行の長さを短くするか、再利用するための1つの回避策:
const SomeClass = '\\Some\\Name\\Space\\SomeClass';
array_map([SomeClass,'method'],$array); # works
または、クラスで外部静的メソッドを何度も使用する場合:
class MyClass{
# in PHP 7.1+ you can make this private:
const SCMethod = '\\Some\\Name\\Space\\SomeClass::method';
public function myMethod($array){
return array_map(self::SCMethod, $array); # works
}
}