2024年PHP开发者大会日本站

ReflectionClass::__construct

(PHP 5, PHP 7, PHP 8)

ReflectionClass::__construct构造一个ReflectionClass

描述

public ReflectionClass::__construct(对象|字符串 $objectOrClass)

构造一个新的ReflectionClass 对象。

参数

objectOrClass

一个包含要反射的类名的字符串,或一个对象

错误/异常

如果要反射的类不存在,则抛出ReflectionException

示例

示例 #1 ReflectionClass 的基本用法

<?php
$reflection
= new ReflectionClass('Exception');
echo
$reflection;
?>

上面的示例将输出类似于以下内容:

Class [ <internal:Core> class Exception implements Stringable, Throwable ] {

  - Constants [0] {
  }

  - Static properties [0] {
  }

  - Static methods [0] {
  }

  - Properties [7] {
    Property [ protected $message = '' ]
    Property [ private string $string = '' ]
    Property [ protected $code = 0 ]
    Property [ protected string $file = '' ]
    Property [ protected int $line = 0 ]
    Property [ private array $trace = [] ]
    Property [ private ?Throwable $previous = NULL ]
  }

  - Methods [11] {
    Method [ <internal:Core> private method __clone ] {

      - Parameters [0] {
      }
      - Return [ void ]
    }

    Method [ <internal:Core, ctor> public method __construct ] {

      - Parameters [3] {
        Parameter #0 [ <optional> string $message = "" ]
        Parameter #1 [ <optional> int $code = 0 ]
        Parameter #2 [ <optional> ?Throwable $previous = null ]
      }
    }

    Method [ <internal:Core> public method __wakeup ] {

      - Parameters [0] {
      }
      - Tentative return [ void ]
    }

    Method [ <internal:Core, prototype Throwable> final public method getMessage ] {

      - Parameters [0] {
      }
      - Return [ string ]
    }

    Method [ <internal:Core, prototype Throwable> final public method getCode ] {

      - Parameters [0] {
      }
    }

    Method [ <internal:Core, prototype Throwable> final public method getFile ] {

      - Parameters [0] {
      }
      - Return [ string ]
    }

    Method [ <internal:Core, prototype Throwable> final public method getLine ] {

      - Parameters [0] {
      }
      - Return [ int ]
    }

    Method [ <internal:Core, prototype Throwable> final public method getTrace ] {

      - Parameters [0] {
      }
      - Return [ array ]
    }

    Method [ <internal:Core, prototype Throwable> final public method getPrevious ] {

      - Parameters [0] {
      }
      - Return [ ?Throwable ]
    }

    Method [ <internal:Core, prototype Throwable> final public method getTraceAsString ] {

      - Parameters [0] {
      }
      - Return [ string ]
    }

    Method [ <internal:Core, prototype Stringable> public method __toString ] {

      - Parameters [0] {
      }
      - Return [ string ]
    }
  }
}

参见

添加注释

用户贡献的注释 5 个注释

13
danbettles at yahoo dot co dot uk
9 年前
要在PHP 5.3中反射命名空间类,必须始终指定类的完全限定名称——即使使用“use”语句为包含命名空间创建了别名。

因此,不要使用

<?php
use App\Core as Core;
$oReflectionClass = new ReflectionClass('Core\Singleton');
?>

而应使用

<?php
use App\Core as Core;
$oReflectionClass = new ReflectionClass('App\Core\Singleton');
?>
3
me [at] klay [dot] me
11 年前
用法示例

public static function getClassData($class)
{
//尝试创建一个新的ReflectionClass类对象
$class = new ReflectionClass($class);

$details = sprintf('%s - %s%s%s%s%s%s%s%s',
$class->getName(),
$class->isInternal() ? '内部类,' : '用户定义类,',
$class->isTrait() ? '是特性,' : '',
$class->isInterface() ? '是接口,' : '',
$class->isAbstract() ? '是抽象类,' : '',
$class->isFinal() ? '是最终类,' : '',
$class->isCloneable() ? '是可克隆的,' : '',
$class->isInstantiable() ? '是可实例化的,' : '',
$class->isIterateable() ? '是可迭代的' : ''
);

return '<pre class="debug">' . rtrim($details, ',') . '</pre>';
}
3
gafisher at griasolutions dot com
12 年前
在Windows Vista(我知道,我知道),PHP 5.3.9上运行以下代码时,当无法实例化所需的类时,ReflectionClass构造函数实际上会抛出ReflectionException

<?php
try {
$ReflectedClass = new ReflectionClass('NonExist');
} catch (
LogicException $Exception) {
die(
'不会进入这里...');
} catch (
ReflectionException $Exception) {
die(
'您的类不存在!');
}
?>
0
ivo at jansch dot nl
14 年前
知道你也可以使用ReflectionClass来检查接口非常有用,即使接口不是类。示例

<?php

interface Edible
{
public function
eat();
}

$refl = new ReflectionClass("Edible");
$methods = $refl->getMethods();
?>

[由danbrown AT php DOT net编辑 - 包含(dbl AT bnet DOT com)于2010年8月18日提交的错误修复,消息如下:“为了使其工作,必须删除下划线(new Reflection_Class -> new ReflectionClass)”]
-2
cspray at gmail dot com
13 年前
值得知道的是,如果你将字符串传递给构造函数,并且由于某种原因无法实例化该类,则会抛出SPL LogicException。

此代码在Mac OS X 10.6.7、AMP、PHP 5.3+上运行

<?php

// index.php
try {
$ReflectedClass = new ReflectionClass('NonExist');
} catch (
LogicException $logicDuh) {
print_r($logicDuh);
}

?>

将返回一个包含有关错误的有用信息的深度嵌套数组。
To Top