根据当前命名空间动态使用不同的类



我希望我的类从其父级继承方法,我已经通过扩展类来做到这一点。但是我也想使用 basename(不带命名空间)实例化一个类,并实例化正确的类,根据当前命名空间选择,然后回退到"公共"类(如果不存在)。

<?php
namespace commonmodels {

class Account extends Model{}
class Orders extends Model{}
class Customer extends Model{
use commonmodelsAccount;
public static function getAccountClass(){
echo get_class(new Account());
}
public static function getOrdersClass(){
echo get_class(new Order());
}
}
}

namespace frontendmodels {
class Account extends commonmodelsAccount {}
class Customer extends commonmodelscustomer {
}
}

我希望commonmodelsCustomer::getAccountClass()输出commonmodelsAccount

frontendmodelsCustomer::getAccountClass()输出frontendmodelsAccount

但由于frontendmodelsOrders不存在frontendmodelsCustomer::getOrdersClass()仍然会输出commonmodelsOrders

您是否尝试像这样使用完整的命名空间:

use commonmodelsAccount as A2;
public static function getAccountClass(){
echo get_class(new A2());
}

public static function getAccountClass(){
echo get_class(new commonmodelsAccount());
}

没有"正确"的解决方法。但是你可以做这样的事情

添加一个组件或一个帮助程序,甚至将其添加到初始类的构造中(取决于你需要使用它多少):

public static function getClass($class)
{
if (class_exists('frontend' . '\' . $class)) {
return frontend . '\' . $class;
} else  {
return $class;
}
}

然后你可以做这样的事情

public static function getAccountClass(){
return self::getClass(Account::class);
}

最新更新