我有一个目录树,在不同的子目录中有许多同名的类。有强烈的意图
不
编辑这些类。
我正在寻找一种方法来加载一个类,在使用它并销毁它的实例之后,加载另一个具有完全相同名称的类。然后使用它,销毁它的实例并重复这个过程。
-
使用替换先前加载的类的相同名称加载类(重载它)
-
在加载同名但路径不同的类之前先卸载类
-
用不同的名称创建一个新类(动态创建的类主体),或者通过添加到它的命名空间。创建过程首先读取源类的主体、方法、属性,并将其“复制”到新类中。类似于实例上的克隆,但在类主体级别上完成。
-
读取第一个类,实例化它,使用它的方法,销毁它的实例。然后删除第一个类中的所有方法,并在其中动态创建从第二个类中读取的具有相同名称的所有方法。
-
对于第三个,我认为这可能是有用的:
Componere
或
Runkit
或
Classkit
但我对他们没有任何经验。
componere
或
Runkit公司
类工具包
你能说他们适合这份工作吗?也许还有其他选择?
也许有一个面向对象的设计模式涵盖了这个问题,但我不熟悉它。
示例代码:
<?php
#------------------------------------
//path Foo/Bar.php
/* class is without a namespace or have the same
as Baz/Bar.php */
class Bar
{
public function getName() : string
{
return 'Foo/Bar';
}
}
#------------------------------------
//path Baz/Bar.php
/* class is without a namespace or have the same
as Foo/Bar.php */
class Bar
{
public function getName() : string
{
return 'Baz/Bar';
}
}
#------------------------------------
//path ./Execute.php
$paths = [
'Foo/Bar.php',
'Baz/Bar.php'
];
$results = [];
foreach ($paths as $path) {
//how to create instance of class Bar in Foo/Bar.php and then in Baz/Bar.php
//without PHP Fatal error: Cannot declare class...
$classDynamic = ...
$results[] = $classDynamic->getName();
unset($classDynamic);
}
var_export($results)
/**
* prints
* array('Foo/Bar', 'Baz/Bar')
*/