PHP 8.4.24 Released!

ReflectionMethod::setAccessible

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

ReflectionMethod::setAccessibleSet method accessibility

Увага

This function has been DEPRECATED as of PHP 8.5.0. Relying on this function is highly discouraged.

Опис

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

Enables invoking of a protected or private method via the ReflectionMethod::invoke() method.

Зауваження: As of PHP 8.1.0, calling this method has no effect; all methods are invokable by default.

Параметри

accessible

true to allow accessibility, or false.

Значення, що повертаються

Не повертає значень.

Журнал змін

Версія Опис
8.5.0 This method has been deprecated, as it no longer has an effect.
8.1.0 Calling this method has no effect; all methods are invokable by default.

Приклади

Приклад #1 Simple Class definition

<?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

Прогляньте також

add a note

User Contributed Notes 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