我想在另一个类中使用带有变量的未知类:
实施例
$classandmethod = "index@show";
namespace Lib\abc;
use Lib\xyz;
class abc{
function controller($classandmethod)
{
$a = explode("@", $classandmethod);
use Lib\Controller\.$a[0];
}
}
但也许不是这样,请帮助大家!
答案 0 :(得分:2)
来自the manual:
use关键字必须在文件的最外层范围(全局范围)或命名空间内声明中声明
所以你不能use
一个你试图去做的课。然后,要从变量中实例化一个来自不同命名空间的类,而不是use
,请提供整个命名空间类:
<?php
namespace G4\Lib
{
class A
{
public $a = "test";
}
}
namespace G4
{
class B
{
public $a;
public function __construct($class)
{
$class = "\\G4\\Lib\\".$class;
$this->a = new $class; // here's the magic
}
}
$b = new B("A");
var_dump($b->a); // test
}
答案 1 :(得分:1)
主要问题是use
不能将变量作为其中的一部分,因为它在解析文件时使用,而变量仅在运行时可用。
这是一个例子,告诉你如何做你想做的事......
<?php
namespace Controller;
ini_set('display_errors', 'On');
error_reporting(E_ALL);
class Index {
public function show() {
echo "Showing...";
}
}
$classandmethod = "Controller\Index@show";
list($className,$method) = explode("@", $classandmethod);
$a= new $className();
$a->$method();
显示......
Showing...
您当然可以说所有这些类都必须位于Controller名称空间中,因此代码将更改为
$classandmethod = "Index@show";
list($className,$method) = explode("@", $classandmethod);
$className = "Controller\\".$className;
$a= new $className();
$a->$method();