我有一个目录树,在其中不同的子目录中,我有很多同名的类。强烈希望不编辑这些类。
我正在寻找一种方法来加载一个类,并在使用它并销毁其实例后加载名称完全相同的另一个类。然后使用它,销毁它的实例并重复该过程。
我想过一些可能的解决方案:
第三次,我认为这可能是有用的:Componere或Runkit或Classkit,但对它们没有任何经验。
您还有其他想法或解决方案吗? 您是否使用过componere或Runkit / Classkit并且可以说它们适合这份工作?也许还有其他选择?
也许有一种OOP设计模式可以解决此问题,但我并不熟悉。
示例代码:
<?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')
*/
答案 0 :(得分:0)
我不认为一旦定义了一个类就无法取消设置类,因为它们共享相同的名称空间,因此会出错。 但是您可以按照以下方式获得想要的效果
class Bar
{
$myname = "";
function __construct($setname="")
{
$this->myname = $setname;
}
function getName()
{
return $myname;
}
}
$paths = array('Foo/Bar','Baz/Bar');
$results = array();
foreach($paths as $p)
{
$bit = new Bar($p);
$results[] = $bit->getName();
}
var_export($results);