php+变量名代替类名,带有变量名和命名空间的PHP类名

我使用

PHP5来构建自己的MVC框架.我的情况是我的所有控制器都在Controller命名空间中,如下所示:

namespace Controllers

{

class Home extends \Framework\Core\Controller

{

...

}

}

在应用程序逻辑中,我需要选择从调用传递的URL调用控制器,如下所示:

namespace Framework\Core;

class Application

{

protected $controllerName = 'home';

protected $methodName = 'index';

protected $controller;

public function __construct()

{

// Parse the received URL

$url = parseUrl();

// Choose the controller, if file exists

if (file_exists('../app/controllers/' . $url[0] . '.php'))

{

$this->controllerName = $url[0];

unset($url[0]);

}

require_once '../app/controllers/' . $this->controllerName . '.php';

// Call the controller

$objToCall = '\\Controllers\\' . $this->controllerName;

$this->controller = new $objToCall(); <<<======= PROBLEM HERE

... Proceed choosing the method and calling the objects method....

}

}

}

我的问题是:

我的控制器文件名为home.php,我的类名为Home(首字母大写).所以上面的代码找不到/ Controllers / home类,因为类是/ Controllers / Home

另一方面,如果我从控制器中删除命名空间并调用:

$this->controller = new $this->controllerName;

它工作正常,甚至名字在家….

我的问题:

a)如果我没有涉及名称空间,为什么将主页翻译为Home?

b)如何解决该问题从命名空间调用类而不需要知道它的大写/小写条件?

请不要建议将第一个字母更改为大写,因为我可能有CustomerReceipt,PersonalCashWithdrawl等类.

谢谢你的帮助.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值