Example #1
0
/**
 * Created by PhpStorm.
 * User: raynald
 * Date: 2/23/15
 * Time: 8:43 AM
 */
function classData(ReflectionClass $class)
{
    $details = "";
    $name = $class->getName();
    if ($class->isUserDefined()) {
        $details .= "{$name} is user defined\n";
    }
    if ($class->isInternal()) {
        $details .= "{$name} is built-in\n";
    }
    if ($class->isInterface()) {
        $details .= "{$name} is interface\n";
    }
    if ($class->isAbstract()) {
        $details .= "{$name} is an abstract class\n";
    }
    if ($class->isFinal()) {
        $details .= "{$name} is a final class\n";
    }
    if ($class->isInstantiable()) {
        $details .= "{$name} can be instantiated\n";
    } else {
        $details .= "{$name} can not be instantiated\n";
    }
    if ($class->isCloneable()) {
        $details .= "{$name} can be cloned\n";
    } else {
        $details .= "{$name} can not be cloned\n";
    }
    return $details;
}
 /**
  */
 public function testIsCloneable()
 {
     $this->assertTrue($this->object->isCloneable());
     $method = new ReflectionMethod('__clone');
     $this->object->addMethod($method);
     $this->assertTrue($this->object->isCloneable());
     $method->setVisibility('private');
     $this->assertFalse($this->object->isCloneable());
 }
 public function testThatCloningIsNotSupported()
 {
     $class = new \ReflectionClass('Symfony\\Component\\DependencyInjection\\Container');
     $clone = $class->getMethod('__clone');
     if (PHP_VERSION_ID >= 50400) {
         $this->assertFalse($class->isCloneable());
     }
     $this->assertTrue($clone->isPrivate());
 }
<?php

trait T
{
}
$r = new ReflectionClass('T');
var_dump(Reflection::getModifierNames($r->getModifiers()));
var_dump($r->isAbstract());
var_dump($r->isInstantiable());
var_dump($r->isCloneable());
 public function isCloneable()
 {
     return $this->reflectionClass->isCloneable();
 }
    private function __clone()
    {
    }
}
$bar = new bar();
print "User class - private __clone\n";
$obj = new ReflectionClass($bar);
var_dump($obj->isCloneable());
$obj = new ReflectionObject($bar);
var_dump($obj->isCloneable());
$h = clone $foo;
print "Closure\n";
$closure = function () {
};
$obj = new ReflectionClass($closure);
var_dump($obj->isCloneable());
$obj = new ReflectionObject($closure);
var_dump($obj->isCloneable());
$h = clone $closure;
print "Internal class - SimpleXMLElement\n";
$obj = new ReflectionClass('simplexmlelement');
var_dump($obj->isCloneable());
$obj = new ReflectionObject(new simplexmlelement('<test></test>'));
var_dump($obj->isCloneable());
$h = clone new simplexmlelement('<test></test>');
print "Internal class - XMLWriter\n";
$obj = new ReflectionClass('xmlwriter');
var_dump($obj->isCloneable());
$obj = new ReflectionObject(new XMLWriter());
var_dump($obj->isCloneable());
$h = clone new xmlwriter();
Example #7
0
 public function testClone()
 {
     $reflection = new \ReflectionClass('SingletonInstance');
     $this->assertFalse($reflection->isCloneable());
 }
Example #8
0
 protected function loadClassInfo(\ReflectionClass $reflectedObject)
 {
     $this->classFile = $reflectedObject->getFileName();
     if (empty($this->classFile)) {
         $this->classFile = self::CLASSINFO_BUILTIN;
     }
     $this->classInterfaces = implode(', ', $reflectedObject->getInterfaceNames());
     $this->classNamespace = $reflectedObject->getNamespaceName();
     $parent = $reflectedObject->getParentClass();
     if ($parent) {
         $this->classParent = $parent->getName();
     }
     if (version_compare(phpversion(), '5.4', '>=')) {
         $this->classTraits = implode(', ', $reflectedObject->getTraitNames());
     }
     $this->abstract = $reflectedObject->isAbstract();
     $this->final = $reflectedObject->isFinal();
     if (version_compare(phpversion(), '5.4', '>=')) {
         $this->cloneable = $reflectedObject->isCloneable();
     }
 }
Example #9
0
function isCloneable($class_name)
{
    $info = new ReflectionClass($class_name);
    return $info->isCloneable();
}