Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 以面向对象的方式返回模型类_Php_Oop - Fatal编程技术网

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);
    }
}