我有一个包含多个PHP文件的目录,这些文件由与文件同名的类组成。 (Sample.php
的班级将被称为Sample
。)
这些类中的每一个都有一个名为OnCall()
的函数。
如何在目录中创建每个类的实例并执行所有OnCall()
个?
我不能手动($sample = new Sample(); $sample->OnCall();
等等),因为用户会添加,编辑和删除更多的课程。
答案 0 :(得分:4)
这样的事情应该完成工作:
<?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();
}
}
答案 1 :(得分:4)
这是一个老问题,但我认为this是一个更好的解决方案。
只是这样做:
use Symfony\Component\ClassLoader\ClassMapGenerator;
var_dump(ClassMapGenerator::createMap(__DIR__.'/library'));
你得到:
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
)
(取自文件)
答案 2 :(得分:0)
这就像是
public function includeClasses($classes) {
$tmpMerge = array(
"classes" => array()
);
foreach ($classes as $class) {
if (file_exists("./Classes/" . $class)) {
require_once("./Classes/" . $class);
$classname = explode(".", $class);
$tmpMerge['classes'][] = $classname[1];
$this->log->info($this->conf["messages"]["class_includedClassSucessfull"] . $classname[1]);
} else {
// File does not exist
}
}
$this->conf = array_merge($tmpMerge, $this->conf);
}
我将在该函数中直接使用该文件,是的,稍后将初始化该类。
此函数接收一个类似于以下内容的数组:
array(3) {
[0]=>
string(22) "class.setFunctions.php"
[1]=>
string(24) "class.renderFrontEnd.php"
[2]=>
string(22) "class.getFunctions.php"
}
它会将类名添加到一个只包含类名的新数组中。然后我会遍历类名并初始化类。
foreach ($this->conf["classes"] as $class) {
$this->$class = new $class($this->conf);
}
答案 3 :(得分:0)
您在目录中创建一个自定义循环并获取所有必需的文件名,然后进行类似的操作。
如果$ filename =您的文件名
require_once $filename;
$className = basename($filename, ".php");
$class = new $className;
$class->OnCall();
另一种解决方案是将所有必需的文件名存储在数组中,然后循环其数组。
答案 4 :(得分:0)
从 Symfony ClassLoader component is deprecated 开始,您可以使用 Composer 的 ClassMapGenerator
。
您首先需要添加 Composer 文件:
composer require composer/composer
然后你可以使用:
$map = ClassMapGenerator::createMap(__DIR__ . '/mydirectory');
您将获得具有完全限定名称和文件路径的相关关联表。
答案 5 :(得分:-2)
foreach (glob('../'.$GO ['name-model'].'/*.php') as $item)
{
require_once $item;$className = ucfirst (basename ($item, '.php'));$class [$className] = new $className ();
}
extract($class);