使用PHP在目录中创建所有类的实例

Jam*_*mes 3 php directory class function

我有一个目录,其中包含几个PHP文件,这些文件由与这些文件同名的类组成。(Sample.php该类将被称为Sample。)

每个此类都有一个称为的函数OnCall()

如何在目录中创建每个类的实例并执行所有OnCall()s?

我无法手动执行操作($sample = new Sample(); $sample->OnCall();,等等等),因为用户将添加,编辑和删除更多的类。

amc*_*ror 6

这是一个老问题,但是我认为是一个更好的解决方案。

只需这样做:

use Symfony\Component\ClassLoader\ClassMapGenerator;

var_dump(ClassMapGenerator::createMap(__DIR__.'/library'));
Run Code Online (Sandbox Code Playgroud)

你得到:

Array
(
    [Acme\Foo] => /var/www/library/foo/Bar.php
    [Acme\Foo\Bar] => /var/www/library/foo/bar/Foo.php
    [Acme\Bar\Baz] => /var/www/library/bar/baz/Boo.php
    [Acme\Bar] => /var/www/library/bar/Foo.php
)
Run Code Online (Sandbox Code Playgroud)

(摘自文档)


Mar*_*ark 5

这样的事情应该可以完成工作:

<?php

    foreach (glob('test/class/*.php') as $file)
    {
        require_once $file;

        // get the file name of the current file without the extension
        // which is essentially the class name
        $class = basename($file, '.php');

        if (class_exists($class))
        {
            $obj = new $class;
            $obj->OnCall();
        }
    }
Run Code Online (Sandbox Code Playgroud)


Kwa*_*adz 5

由于Symfony ClassLoader 组件已被弃用,您可以从 Composer 中使用ClassMapGenerator

您首先需要添加 Composer 包:

composer require composer/class-map-generator
Run Code Online (Sandbox Code Playgroud)

然后你可以使用:

$map = ClassMapGenerator::createMap(__DIR__ . '/mydirectory');
Run Code Online (Sandbox Code Playgroud)

您将获得具有完全限定名称和文件路径的相关关联表。