本文整理汇总了PHP中lang\XPClass::detailsForClass方法的典型用法代码示例。如果您正苦于以下问题:PHP XPClass::detailsForClass方法的具体用法?PHP XPClass::detailsForClass怎么用?PHP XPClass::detailsForClass使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类lang\XPClass
的用法示例。
在下文中一共展示了XPClass::detailsForClass方法的4个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的PHP代码示例。
示例1: canBeCachedViaXpRegistry
public function canBeCachedViaXpRegistry()
{
with(\xp::$registry['details.' . ($fixture = 'DummyDetails')] = $details = $this->dummyDetails());
$actual = \lang\XPClass::detailsForClass($fixture);
unset(\xp::$registry['details.' . $fixture]);
$this->assertEquals($details, $actual);
}
示例2: parseDetails
public function parseDetails($class)
{
$details = XPClass::detailsForClass($class->getName());
return isset($details['class']);
}
示例3: newinstance
function newinstance($spec, $args, $def = null)
{
static $u = 0;
if ('#' === $spec[0]) {
$p = strrpos($spec, ' ');
$annotations = substr($spec, 0, $p) . ' ';
$spec = substr($spec, $p + 1);
} else {
$annotations = '';
}
// Create unique name
$n = "·" . ++$u;
if (0 === strncmp($spec, 'php.', 4)) {
$spec = substr($spec, 4);
} else {
if (false === strpos($spec, '.')) {
$spec = \lang\XPClass::nameOf($spec);
}
}
// Handle generics, PHP types and all others.
if (strstr($spec, '<')) {
$class = \lang\Type::forName($spec);
$type = $class->literal();
$generic = xp::$meta[$class->getName()]['class'][DETAIL_GENERIC];
} else {
if (false === strpos($spec, '.')) {
$type = $spec;
$generic = null;
} else {
try {
$type = xp::$loader->loadClass0($spec);
} catch (\lang\ClassLoadingException $e) {
xp::error($e->getMessage());
}
$generic = null;
}
}
$name = strtr($type, '\\', '.') . $n;
if (interface_exists($type)) {
$decl = ['kind' => 'class', 'extends' => ['lang.Object'], 'implements' => ['\\' . $type], 'use' => []];
} else {
if (trait_exists($type)) {
$decl = ['kind' => 'class', 'extends' => ['lang.Object'], 'implements' => [], 'use' => ['\\' . $type]];
} else {
$decl = ['kind' => 'class', 'extends' => ['\\' . $type], 'implements' => [], 'use' => []];
}
}
$defined = \lang\ClassLoader::defineType($annotations . $name, $decl, $def);
if (false === strpos($type, '\\')) {
xp::$cn[$type . $n] = $spec . $n;
}
if ($generic) {
\lang\XPClass::detailsForClass($name);
xp::$meta[$name]['class'][DETAIL_GENERIC] = $generic;
}
if ($defined->hasConstructor()) {
return $defined->getConstructor()->newInstance($args);
} else {
return $defined->newInstance();
}
}
示例4: typeAnnotations
/** @return var */
public function typeAnnotations()
{
$class = $this->typeName();
$details = XPClass::detailsForClass($class);
if ($details && $details['class'][DETAIL_ANNOTATIONS]) {
return $this->annotationsOf($details['class'][DETAIL_ANNOTATIONS]);
} else {
return null;
}
}