ReflectionMethod::setAccessible

(PHP 5 >= 5.3.2, PHP 7, PHP 8)

ReflectionMethod::setAccessibleДелает метод доступным

Внимание

Начиная с PHP 8.5.0 функция УСТАРЕЛА. Полагаться на функцию настоятельно не рекомендуют.

Описание

#[\Deprecated]
public function ReflectionMethod::setAccessible(bool $accessible): void

Метод открывает доступ к защищённому или закрытому свойству для метода ReflectionMethod::invoke().

Замечание: С PHP 8.1.0 вызов метода утратил смысл; методы доступны для вызова по умолчанию.

Список параметров

accessible

Значение true делает метод доступным, false — закрывает доступ к методу.

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

Функция не возвращает значения после выполнения.

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

Версия Описание
8.5.0 Метод объявлен устаревшим, поскольку больше ни на что не влияет.
8.1.0 Вызов этого метода ни на что не влияет; все методы по умолчанию доступны для вызова.

Примеры

Пример #1 Пример определения класса

<?php

class MyClass
{
private function
foo()
{
return
'bar';
}
}

$method = new ReflectionMethod("MyClass", "foo");
$method->setAccessible(true);

$obj = new MyClass();
echo
$method->invoke($obj);
echo
$obj->foo();

?>

Вывод приведённого примера будет похож на:

bar
Fatal error: Uncaught Error: Call to private method MyClass::foo() from global scope in /in/qdaZS:16

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

Добавить

Примечания пользователей 1 note

up
21
dave1010 at gmail dot com
15 years ago
This is handy for accessing private methods but remember that things are normally private for a reason! Unit Testing is one (debatable) use case for this.

Example:
<?php
class Foo {
  private function myPrivateMethod() {
    return 7;
  }
}

$method = new ReflectionMethod('Foo', 'myPrivateMethod');
$method->setAccessible(true);
 
echo $method->invoke(new Foo);
// echos "7"
?>

This works nicely with PHPUnit: http://php.net/manual/en/reflectionmethod.setaccessible.php
To Top