あなた自身で実装することができます。とにかくそれを明示的にトリガする必要があるので、__invoke()
マジックメソッドはあなたが必要とするものではないかもしれません。あなたの魔方法を宣言し、あなたのクラス(ここではSomeClassOne
)内で使用するMagicHelper
クラスを持っている以下のコードを考えてみましょう。これは組み込みのPHP関数ではないかもしれませんが、それはOOPのことです。
<?php
class MagicHelper{
public static function __onClassCall(){
// LOGIC FOR SOME SPECIAL INITIALIZATION ON THE INSTANTIATION OF A CLASS OBJECT GOES HERE...
// THIS METHOD IS FIRED EACH TIME AN OBJECT IS INSTANTIATED
}
public static function __onMethodCall(){
// LOGIC FOR DEBUGGING GOES HERE...
// THIS METHOD IS FIRED EACH TIME A METHOD IS CALLED
}
}
class SomeClassOne{
private $prop;
public static $CLASS_PREP_ENABLED = true; //<== COULD BE TURNED OFF OR ON
public static $METHOD_DEBUG_ENABLED = true; //<== COULD BE TURNED OFF OR ON
public function __construct($prop = null) {
$this->prop = $prop;
if(self::$CLASS_PREP_ENABLED){
// CALL THE STATIC MAGIC __onClassCall METHOD DECLARED IN THE MagicHelper CLASS
// EACH TIME A NEW OBJECT IS INSTANTIATED
MagicHelper::__onClassCall();
}
}
function __invoke() {
// YOU COULD AS WELL USE THIS BUT I DOUBT THIS FITS YOUR DESCRIPTION.
}
public function getProp() {
return $this->prop;
}
public function setProp($prop) {
$this->prop = $prop;
return $this;
}
public function methodOne($paramOne){
// THE LOGIC FOR THIS METHOD GOES HERE
//...
// CALL THE STATIC MAGIC __onMethodCall METHOD DECLARED IN THE MagicHelper CLASS
// EACH TIME A NEW OBJECT IS INSTANTIATED
if(self::$METHOD_DEBUG_ENABLED) {
MagicHelper::__onMethodCall();
}
}
public function methodTwo($paramTwo){
// THE LOGIC FOR THIS METHOD GOES HERE
//...
// CALL THE STATIC MAGIC __onMethodCall METHOD DECLARED IN THE MagicHelper CLASS
// EACH TIME A NEW OBJECT IS INSTANTIATED
if(self::$METHOD_DEBUG_ENABLED) {
MagicHelper::__onMethodCall();
}
}
}
「反射」を試しましたか? [ReflectionMethod :: invoke](http://php.net/manual/en/reflectionmethod.invoke.php)を見てください。 – postrel
* debug backtrace *を探してください - あなたが探しているものかもしれません。例:http://stackoverflow.com/a/8497530/2329487 – shudder
aopフレームワークを使用できます:https://github.com/goaop/framework – sectus