Php 以面向对象的方式返回模型类
我在继承某个父类的所有类上都有一个冗余方法Php 以面向对象的方式返回模型类,php,oop,Php,Oop,我在继承某个父类的所有类上都有一个冗余方法q() 方法q()总是返回子类的模型。请参阅代码片段: class Record1 extends AR { public static function q() { return self::model(__CLASS__) } } class Record2 extends AR { public static function q() { return self
q()
方法q()
总是返回子类的模型。请参阅代码片段:
class Record1 extends AR
{
public static function q()
{
return self::model(__CLASS__)
}
}
class Record2 extends AR
{
public static function q()
{
return self::model(__CLASS__)
}
}
我计划在父类AR中移动
q
方法。我考虑使用get\u called\u class
,但当我试图在父类中访问子类时,它不会检测到它
这两个类是MySQL数据库的AR类
要查询表,我将执行以下操作:
$record1 = Record1::q()->findAll()
有什么想法吗?回答这个问题,因为
get\u called\u class
无论如何都是可能的
class AR
{
public static function q()
{
$className = get_called_class();
return $className::model($className);
}
}
我仍然对其他答案持开放态度。稍微猜测一下,您可能希望使用“静态”。例如
class A {
static $a = 'a';
public static function c() {
return static::$a;
}
}
class B extends A {
static $a = 'b';
}
/*
* string(1) "a"
* string(1) "b"
*/
var_dump(A::c());
var_dump(B::c());
如果在return语句中使用self,将得到两个‘a’。后期静态绑定是实现这一点的一种方法。您正在通过get_调用_类函数来使用它。从PHP5.5开始,您还可以使用“static::class”获取被调用类的名称。您的方法可能与“static::class”类似:
“当我试图在父类中访问它时”-如何?这应该是什么,工厂方法?一点上下文将有助于找到“OOP方式”@fschmengler更新了这个问题。我可以这样解释。我不知道该怎么做才能给这件事增加更多的背景。很抱歉。FWIW静态方法返回静态类名调用静态方法调用实例方法不是OOP.nice!比使用get_调用_类函数更少的代码谢谢!
class AR
{
public static function q() {
return self::model(static::class);
}
}