ReflectionClass::isInstantiable

(PHP 5, PHP 7, PHP 8)

ReflectionClass::isInstantiableVerifica se a classe é instanciável

Descrição

public ReflectionClass::isInstantiable(): bool

Verifica se a classe é instanciável.

Parâmetros

Esta função não possui parâmetros.

Valor Retornado

Retorna true em caso de sucesso ou false em caso de falha.

Exemplos

Exemplo #1 Exemplo de ReflectionClass::isInstantiable()

<?php
class C { }

interface
iface {
function
f1();
}

class
ifaceImpl implements iface {
function
f1() {}
}

abstract class
abstractClass {
function
f1() { }
abstract function
f2();
}

class
D extends abstractClass {
function
f2() { }
}

trait
T {
function
f1() {}
}

class
privateConstructor {
private function
__construct() { }
}

$classes = array(
"C",
"iface",
"ifaceImpl",
"abstractClass",
"D",
"T",
"privateConstructor",
);

foreach(
$classes as $class ) {
$reflectionClass = new ReflectionClass($class);
echo
"$class é instânciável? ";
var_dump($reflectionClass->isInstantiable());
}

?>

O exemplo acima produzirá:

C é instânciável?  bool(true)
iface é instânciável?  bool(false)
ifaceImpl é instânciável?  bool(true)
abstractClass é instânciável?  bool(false)
D é instânciável?  bool(true)
T é instânciável?  bool(false)
privateConstructor é instânciável?  bool(false)

Veja Também

adicione uma nota

Notas Enviadas por Usuários (em inglês) 1 note

up
2
shaun at slickdesign dot com dot au
7 years ago
An example missing from the documentation is that `ReflectionClass::isInstantiable` will also return false for traits, as well as interfaces and abstract classes.<?phptrait t {    // Optional trait methods and properties etc.}$reflectionClass = new ReflectionClass("t");var_dump($reflectionClass->isInstantiable()); // bool(false)?>As for classes with private constructors, it is still possible to create an instance by either bypassing the constructor using `ReflectionClass::newInstanceWithoutConstructor`, or by ensuring the class has a method which can create a new instance.<?phpclass p {    private function __construct() {        // Optional constructor logic - not called when ReflectionClass::newInstanceWithoutConstructor is used.    }    public static function create() {        return new p;    }    // Optional methods and properties etc.}// Class is not classed as instantiable.$reflectionClass = new ReflectionClass("p");var_dump($reflectionClass->isInstantiable()); // bool(false)// We're still able to create an instance using one of the two methods.$p = p::create();$p = $reflectionClass->newInstanceWithoutConstructor();?>The same is also true for protected constructors, however, the class can be instantiated from either parent or child methods, depending on where the constructor is defined.<?phpclass p {    protected function __construct() {        // Optional constructor logic.    }    public static function create( $class = "" ) {        if (!$class) {            $class = get_called_class();        }        return new $class;    }    // Optional parent methods and properties etc.}class c extends p{    // Optional child methods and properties etc.}// Both child and parent static methods have access to each other's protected constructor.$p = c::create("p");$c = p::create("c");// Both are still not classed as being instantiable.$reflectionClassP = new ReflectionClass("p");$reflectionClassC = new ReflectionClass("c");var_dump($reflectionClassP->isInstantiable()); // bool(false)var_dump($reflectionClassC->isInstantiable()); // bool(false)// We're still able to bypass the constructor and create an instance for each.$p = $reflectionClassP->newInstanceWithoutConstructor();$c = $reflectionClassC->newInstanceWithoutConstructor();?>
To Top