Benim durumumda, ben bazı sınıfta call_user_func()
ile statik yöntemini çağırabilirsiniz üst sınıfta bir yöntem oluşturmak için gerekli. Eğer tam sınıf adını biliyorsanız, call_user_func()
hiçbir problemo yapabilirsiniz. Hüner alt sınıf 'ad statik yöntemi çağırmak oldu.
Bu yüzden sahip yani
\MyTools\AbstractParent
\Something\Else\Foo extends \MyTools\AbstractParent
\Something\Else\Bar extends \MyTools\AbstractParent
Biz şimdi AbstractParent
bir yöntem gerekir. Altsınıftan adlandırılan bu yöntem, Foo
kendi ad prepending tarafından Bar::doMe()
çağırmak mümkün olacak.
Burada dinamik çağrı ile bunu nasıl:
namespace MyTools;
abstract class AbstractParent {
public static method doMe(){}
public function callSomethingStaticInClass($class){
// current namespace IS NOT MyTools
// so you cannot use __NAMESPACE__
$currentClass = get_class($this);
$refl = new ReflectionClass($currentClass);
$namespace = $refl->getNamespaceName();
// now we know what the subclass namespace is...
// so we prefix the short class name
$class = $namespace . '\\' . $class;
$method = 'doMe';
return call_user_func(array( $class, $method ));
}
};
namespace Something\Else;
class Foo extends AbstractParent { }
class Bar extends AbstractParent { }
$foo = new Foo();
$foo->callSomethingStaticInClass('Bar');
Onun yerine get_class($this)
ile statik çağrısı ile iş yapmak için get_called_class()