我希望我的班级继承其父级的方法,我通过扩展课程来完成这项工作。但我还想使用basename(没有命名空间)实例化一个类,并使用正确的类进行实例化,根据当前的命名空间进行选择,然后再回到“常见”状态。如果它不存在,则为class。
例如
<?php
namespace common\models {
class Account extends Model{}
class Orders extends Model{}
class Customer extends Model{
use common\models\Account;
public static function getAccountClass(){
echo get_class(new Account());
}
public static function getOrdersClass(){
echo get_class(new Order());
}
}
}
namespace frontend\models {
class Account extends common\models\Account {}
class Customer extends common\models\customer {
}
}
我希望common\models\Customer::getAccountClass()
输出common\models\Account
和
frontend\models\Customer::getAccountClass()
输出frontend\models\Account
但由于frontend\models\Orders
不存在,frontend\models\Customer::getOrdersClass()
仍会输出common\models\Orders
答案 0 :(得分:0)
您是否尝试使用完整名称空间:
use common\models\Account as A2;
public static function getAccountClass(){
echo get_class(new A2());
}
或
public static function getAccountClass(){
echo get_class(new common\models\Account());
}
答案 1 :(得分:0)
没有“正确”的方法来解决它。但是你可以做这样的事情
添加组件或帮助程序,甚至将其添加到初始类的构造中(取决于您需要使用它的程度):
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);
}