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