我们可以在创建新对象时更改类名吗


Can we varied a class name during creating a new object?

我在不同的php文件上写了两个同名的类。我想一次加载一个。为此我搜索了许多地方。。我找到了这段代码。我想有人能详细说明它的作用吗?

$class= $this->controller.'Controller_';
$controller=new $class($this->registry);

如果可以的话,请解释更多。。。

您可以通过使用变量来引用类。因此,在这种情况下,使用$this->controller的值和常量字符串'Controller_'来组合类名。因此,如果$this->controller'Foo',$class就变成了'FooController_'。第二行实例化此类的对象,并将值传递给它的构造函数。

所以最后,这个代码确实做到了:

$controller = new FooController_($this->registry);

优点是,"Foo"部分是可变的。例如,您可以将url路径映射到一个类,这样example.com/foofooController处理,example.com/barbarController处理。

所以这不是你想要的。这是加载具有不同名称的不同类。

如果有两个名称相同的类,则必须确保只加载要使用的类的文件。不能使用具有相同名称的两个类,除非它们位于不同的命名空间中。因此,如果您有两个文件,foo1.php和foo2.php,并且每个文件都包含一个名为foo的类,那么您需要包含正确的文件。但我认为这是一个糟糕的设计。通常,您不应该在相同名称的类之间进行选择,除非在测试用例中,单元测试可以加载真实类的模拟版本。