我希望我的类从其父级继承方法,我已经通过扩展类来做到这一点。但是我也想使用 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);
}