Get public methods class php

Функции для работы с классами и объектами

Сделайте объект какого-нибудь класса. Примените к объекту функцию get_class и узнайте имя класса, которому принадлежит объект.

Сделайте два класса: Test1 и Test2 . Пусть оба класса имеют свойство name . Создайте некоторое количество объектов этих классов и запишите в массив $arr в произвольном порядке. Переберите этот массив циклом и для каждого объекта выведите значение его свойства name и имя класса, которому принадлежит объект.

Функция get_class_methods

Сделайте класс Test с методами method1 , method2 и method3 . С помощью функции get_class_methods получите массив названий методов класса Test .

Создайте объект класса Test , запишите его в переменную $test . С помощью функции get_class_methods получите массив названий методов объекта. Переберите этот массив циклом и в этом цикле вызовите каждый метод объекта.

Функция get_class_vars

Сделайте класс Test с публичными свойствами prop1 и prop2 , а также с приватными свойствами prop3 и prop4 .

Вызовите функцию get_class_vars снаружи класса Test . Выведите массив доступных свойств.

Вызовите функцию get_class_vars внутри класса Test (например, в конструкторе). Выведите массив доступных свойств.

Функция get_object_vars

Сделайте класс Test с публичными свойствами prop1 и prop2 , а также с приватными свойствами prop3 и prop4 . Создайте объект этого класса. С помощью функции get_object_vars получите массив свойств созданного объекта.

Функция class_exists

Пусть у вас есть класс Test1 и нет класса Test2 . Проверьте, что выведет функция class_exists для класса Test1 и для класса Test2 .

Пусть GET параметром в адресную строку передается название класса. Проверьте, существует ли такой класс. Выведите соответствующее сообщение на экран.

Функция method_exists

Сделайте класс Test с методом method1 и без метода method2 . Проверьте, что выведет функция method_exists для метода method1 и для метода method2 .

Пусть GET параметрами в адресную строку передаются название класса и его метод. Проверьте, существует ли такой класс. Если существует — проверьте существование переданного метода. Если и метод существует — создайте объект данного класса, вызовите указанный метод и выведите результат его работы на экран.

Читайте также:  Spring programming in java

Функция property_exists

Сделайте класс Test со свойством prop1 и без свойства prop2 . Проверьте, что выведет функция property_exists для свойства prop1 и для свойства prop2 .

Дан массив со свойствами класса. Дан также класс, имеющий часть из этих свойств. Переберите этот массив циклом, для каждого свойства проверьте, существует ли оно в классе и, если существует, выведите на экран значение этого свойства.

Функция get_parent_class

Сделайте класс ChildClass наследующий от ParentClass . С помощью функции get_parent_class выведите на экран родителя класса ParentClass .

Функции is_subclass_of

Сделайте класс ChildClass наследующий от ParentClass , который в свою очередь наследует от GrandParentClass

С помощью функции is_subclass_of проверьте, является ли класс ChildClass потомком GrandParentClass .

С помощью функции is_subclass_of проверьте, является ли класс ParentClass потомком GrandParentClass .

С помощью функции is_subclass_of проверьте, является ли класс ChildClass потомком ParentClass .

Функция is_a

Сделайте класс ChildClass наследующий от ParentClass . Создайте объект класса ChildClass , запишите его в переменную $obj .

С помощью функции is_a проверьте, принадлежит ли объект $obj классу ChildClass .

С помощью функции is_a проверьте, принадлежит ли объект $obj классу ParentClass .

Функция get_declared_classes

Выведите на экран список всех объявленных классов.

Пусть у вас есть интерфейс iTest1 и нет интерфейса iTest2 .

Проверьте, что выведет функция interface_exists для интерфейса iTest1 и для интерфейса iTest2 .

Функция get_declared_interfaces

Выведите на экран список всех объявленных интерфейсов.

Функция get_declared_traits

Выведите на экран список всех объявленных трейтов.

Функция trait_exists

Пусть у вас есть трейт Trait1 и нет трейта Trait2 .

Проверьте, что выведет функция trait_exists для трейта Trait1 и для трейта Trait2 .

Источник

ReflectionClass::getMethods

Фильтрация результата для включения в список только методов с определёнными атрибутами. По умолчанию фильтрации нет.

Комбинация из следующих констант через логическое ИЛИ: ReflectionMethod::IS_STATIC , ReflectionMethod::IS_PUBLIC , ReflectionMethod::IS_PROTECTED , ReflectionMethod::IS_PRIVATE , ReflectionMethod::IS_ABSTRACT , ReflectionMethod::IS_FINAL , так что все методы с любым из перечисленных атрибутов будут возвращены.

Замечание: Обратите внимание, что прочие побитовые операции, к примеру ~ не будут работать так, как ожидается. Другими словами, например, невозможно получить все нестатические методы.

Возвращаемые значения

Массив ( array ) объектов класса ReflectionMethod , отражающих каждый метод.

Читайте также:  Java need for speed world

Список изменений

Примеры

Пример #1 Пример использования ReflectionClass::getMethods()

class Apple public function firstMethod () < >
final protected function secondMethod () < >
private static function thirdMethod () < >
>

$class = new ReflectionClass ( ‘Apple’ );
$methods = $class -> getMethods ();
var_dump ( $methods );
?>

Результат выполнения данного примера:

array(3) < [0]=>object(ReflectionMethod)#2 (2) < ["name"]=>string(11) "firstMethod" ["class"]=> string(5) "Apple" > [1]=> object(ReflectionMethod)#3 (2) < ["name"]=>string(12) "secondMethod" ["class"]=> string(5) "Apple" > [2]=> object(ReflectionMethod)#4 (2) < ["name"]=>string(11) "thirdMethod" ["class"]=> string(5) "Apple" > >

Пример #2 Пример фильтрации результата вызова ReflectionClass::getMethods()

class Apple public function firstMethod () < >
final protected function secondMethod () < >
private static function thirdMethod () < >
>

$class = new ReflectionClass ( ‘Apple’ );
$methods = $class -> getMethods ( ReflectionMethod :: IS_STATIC | ReflectionMethod :: IS_FINAL );
var_dump ( $methods );
?>

Результат выполнения данного примера:

array(2) < [0]=>object(ReflectionMethod)#2 (2) < ["name"]=>string(12) "secondMethod" ["class"]=> string(5) "Apple" > [1]=> object(ReflectionMethod)#3 (2) < ["name"]=>string(11) "thirdMethod" ["class"]=> string(5) "Apple" > >

Смотрите также

  • ReflectionClass::getMethod() — Возвращает экземпляр ReflectionMethod для метода класса
  • get_class_methods() — Возвращает массив имён методов класса

User Contributed Notes 3 notes

ReflectionClass::getMethods() sorts the methods by class (lowest in the inheritance tree first) then by the order they are defined in the class definition:

class A public function method1 ()

$class = new ReflectionClass ( ‘B’ );
print_r ( $class -> getMethods ());
?>

This will output:

Array
(
[0] => ReflectionMethod Object
(
[name] => method3
[class] => B
)

[1] => ReflectionMethod Object
(
[name] => method4
[class] => B
) [2] => ReflectionMethod Object
(
[name] => method1
[class] => A
) [3] => ReflectionMethod Object
(
[name] => method2
[class] => A
)

Note, for ReflectionClass::getMethods() not all methods in a final class are final, just the ones that have explicit modifier.
If you want to use an and operator for the filter, here is a simple implementation
final class Apple public function publicMethod () < >
public final function publicFinalMethod () < >
protected final function protectedFinalMethod () < >
private static function privateStaticMethod () < >
>

Читайте также:  Страницу сохранить папка html

class MyReflection extends ReflectionClass public function __construct ( $argument ) parent :: __construct ( $argument );
>

/**
* (non-PHPdoc)
* @see ReflectionClass::getMethods()
*/
public function getMethods ( $filter = null , $useAndOperator = true ) if ( $useAndOperator !== true ) return parent :: getMethods ( $filter );
>

$methods = parent :: getMethods ( $filter );
$results = array();

$class = new MyReflection ( ‘Apple’ );
$methods = $class -> getMethods ( ReflectionMethod :: IS_FINAL | ReflectionMethod :: IS_PUBLIC );
var_dump ( $methods );

$methods = $class -> getMethods ( ReflectionMethod :: IS_FINAL | ReflectionMethod :: IS_PUBLIC , false );
var_dump ( $methods );
?>

Result:
array(1) [0]=>
object(ReflectionMethod)#4 (2) [«name»]=>
string(17) «publicFinalMethod»
[«class»]=>
string(5) «Apple»
>
>

array(3) [0]=>
&object(ReflectionMethod)#5 (2) [«name»]=>
string(12) «publicMethod»
[«class»]=>
string(5) «Apple»
>
[1]=>
&object(ReflectionMethod)#3 (2) [«name»]=>
string(17) «publicFinalMethod»
[«class»]=>
string(5) «Apple»
>
[2]=>
&object(ReflectionMethod)#6 (2) [«name»]=>
string(20) «protectedFinalMethod»
[«class»]=>
string(5) «Apple»
>
>

Method ReflectionClass::getMethods doesn’t work constantly across different versions of PHP. For following code piece

class Dummy implements Iterator
public function current () <>
public function next () <>
public function key () <>
public function valid () <>
public function rewind () <>
>

$reflection = new ReflectionClass ( ‘Dummy’ );
$aMethods = $reflection -> getMethods ();
echo ‘# of methods: ‘ , count ( $aMethods ), «\n» ;
?>

, it outputs «# of methods: 10» on PHP 5.2.14 and PHP 5.2.17, including all methods defined in the class itself and in the interface no matter if a method has been implemented or overridden; however, it returns «# of methods: 5» on PHP 5.3.5. Based on some other tests did by my colleagues, I assume it also returns «# of methods: 5» on PHP 5.2.10 and PHP 5.3.6.

  • ReflectionClass
    • _​_​construct
    • getAttributes
    • getConstant
    • getConstants
    • getConstructor
    • getDefaultProperties
    • getDocComment
    • getEndLine
    • getExtension
    • getExtensionName
    • getFileName
    • getInterfaceNames
    • getInterfaces
    • getMethod
    • getMethods
    • getModifiers
    • getName
    • getNamespaceName
    • getParentClass
    • getProperties
    • getProperty
    • getReflectionConstant
    • getReflectionConstants
    • getShortName
    • getStartLine
    • getStaticProperties
    • getStaticPropertyValue
    • getTraitAliases
    • getTraitNames
    • getTraits
    • hasConstant
    • hasMethod
    • hasProperty
    • implementsInterface
    • inNamespace
    • isAbstract
    • isAnonymous
    • isCloneable
    • isEnum
    • isFinal
    • isInstance
    • isInstantiable
    • isInterface
    • isInternal
    • isIterable
    • isIterateable
    • isReadOnly
    • isSubclassOf
    • isTrait
    • isUserDefined
    • newInstance
    • newInstanceArgs
    • newInstanceWithoutConstructor
    • setStaticPropertyValue
    • _​_​toString
    • export

    Источник

Оцените статью