谷歌镜像 伍佰目录 短网址
  当前位置:海洋目录网 » 站长资讯 » 站长资讯 » 文章详细 订阅RssFeed

PHP - Manual: ReflectionNamedType::getName

来源:网络转载 浏览:48641次 时间:2023-12-08
ReflectionNamedType::isBuiltin » « ReflectionNamedType
  • PHP 手册
  • 函数参考
  • 变量与类型相关扩展
  • 反射
  • ReflectionNamedType

ReflectionNamedType::getName

(PHP 7 >= 7.1.0, PHP 8)

ReflectionNamedType::getName — 以字符串形式获取类型的名称

说明

public ReflectionNamedType::getName(): string

参数

此函数没有参数。

返回值

返回被反射的类型的名称。

参见

  • ReflectionType::__toString() - To string
add a note

User Contributed Notes 1 note

up down 0 e3jeremy at gmail dot com3 years ago Method "getName" is available when you access getType from getParameters from class reports information of a method(ReflectionMethod).
No need to instantiate the ReflectionNamedType.

Below is my custom method on resolving method dependencies, getName is a big help.

<?php

class A
{
    public function my()
    {
        return ' My ';
    }
}

class B
{
    public function __construct(A $a)
    {
        $this->a = $a;
    }

    public function hello($string)
    {
        return 'Hello' . $this->a->my() . $string . '.';
    }
}

class C
{
    public function print($instance, $method)
    {
        $params = ['World'];

        echo call_user_func_array(array($instance, $method), array_merge($this->resolveMethodDependencies($instance, $method), $params));
    }

    public function instantiate($class)
    {
        if(method_exists($class, '__construct')) $instance = new $class(...$this->resolveMethodDependencies($class, '__construct'));
        else $instance = new $class;

        return $instance;
    }

    protected function resolveMethodDependencies($class, $method)
    {
        $params = [];
        $reflection = new \ReflectionMethod($class, $method);

        foreach ($reflection->getParameters() as $param) {

            if($type = $param->getType()) {

                if(!$type || !$this->instatiatable ($type)) continue;

                // This is the right way to get the class name in string.
                $className = $type->getName();

                // This will throw error.
                // $className = $param->getType();

                // Alos this one will do the trick.
                // $className = (string) $param->getType();

                if(method_exists($className, '__construct')) {
                    $params[] = new $className(...$this->resolveMethodDependencies($className, '__construct'));
                    continue;
                }

                $params[] = new $className;
            }
        }
        return $params;
    }

    protected function instatiatable ($type)
    {
        // Add conditon if something is leftout.
        // This is to ensure that the type is existing class.
        return $type != 'Closure' && !is_callable($type) && class_exists($type);
    }
}

$class = new C;

$class->print(
    $class->instantiate('B'), 'hello'
);

Output:
Hello My World.
add a note

官方地址:https://www.php.net/manual/en/reflectionnamedtype.getname.php

  推荐站点

  • At-lib分类目录At-lib分类目录

    At-lib网站分类目录汇集全国所有高质量网站,是中国权威的中文网站分类目录,给站长提供免费网址目录提交收录和推荐最新最全的优秀网站大全是名站导航之家

    www.at-lib.cn
  • 中国链接目录中国链接目录

    中国链接目录简称链接目录,是收录优秀网站和淘宝网店的网站分类目录,为您提供优质的网址导航服务,也是网店进行收录推广,站长免费推广网站、加快百度收录、增加友情链接和网站外链的平台。

    www.cnlink.org
  • 35目录网35目录网

    35目录免费收录各类优秀网站,全力打造互动式网站目录,提供网站分类目录检索,关键字搜索功能。欢迎您向35目录推荐、提交优秀网站。

    www.35mulu.com
  • 就要爱网站目录就要爱网站目录

    就要爱网站目录,按主题和类别列出网站。所有提交的网站都经过人工审查,确保质量和无垃圾邮件的结果。

    www.912219.com
  • 伍佰目录伍佰目录

    伍佰网站目录免费收录各类优秀网站,全力打造互动式网站目录,提供网站分类目录检索,关键字搜索功能。欢迎您向伍佰目录推荐、提交优秀网站。

    www.wbwb.net