【问题标题】:Get all class dependencies that are available获取所有可用的类依赖项
【发布时间】:2016-12-12 05:36:49
【问题描述】:

对不起,如果这是一个新手问题。我刚刚习惯了 PHP 的反射 API 和独立于框架的命名空间。

我有这个代码:

<?php # Script 3.4 - index.php

require_once __DIR__.'/vendor/autoload.php';

use App\ApptEncoder;
use App\BloggsApptEncoder;
use App\MegaApptEncoder;

$userDefinedClasses = array_filter(
    get_declared_classes(),
    function($className) {
        return call_user_func(
            array(new ReflectionClass($className), 'isUserDefined')
        );
    }

);

echo('<pre>' . var_dump($userDefinedClasses) . '</pre>');

稍后在脚本中我调用 ApptEncoder、BloggsApptEncoder 和 MegaApptEncoder,它们确实有效。但是在这个 var_dump 中,它们没有显示。 它显示的只是:

/home/vagrant/code/ullman/index.php:20:
array (size=2)
  174 => string 'ComposerAutoloaderInit9447e6ccfd181a47ff4686960bd95f38' (length=54)
  175 => string 'Composer\Autoload\ClassLoader' (length=29)

【问题讨论】:

    标签: php reflection dependencies autoloader


    【解决方案1】:

    我确定get_declared_classes() 是这样工作的:

    返回当前脚本中声明的类的名称数组。

    当前脚本仅表示当前文件。因此,只要您的类包含在同一个文件中,它们就会由get_declared_classes() 返回,否则您必须实例化一个新对象。例如:

    // As of PHP 7.0
    use App\{ApptEncoder as a, BloggsApptEncoder as b, MegaApptEncoder as c};
    
    $a = new a();
    $b = new b();
    $c = new c();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-09-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多