is_callable
учитывает видимость, но поскольку вы используете его из класса, он всегда будет иметь значение TRUE
.
Чтобы получить видимость метода, вы должны использовать Reflection API и проверить модификаторы метода
Сокращенный пример из руководства по PHP:
class Testing
{
final public static function foo()
{
return;
}
}
// this would go into your __call method
$foo = new ReflectionMethod('Testing', 'foo');
echo implode(
Reflection::getModifierNames(
$foo->getModifiers()
)
); // outputs finalpublicstatic
То же самое доступно для свойств .
Однако из-за сложности отражения в классе это может быть медленным.Вы должны сравнить его, чтобы увидеть, сильно ли оно влияет на ваше приложение.