【问题标题】:PHP static member inheritancePHP静态成员继承
【发布时间】:2015-06-10 19:19:38
【问题描述】:

我有这个基类:

<?php

use Parse\ParseObject;
use Parse\ParseQuery;

class BaseModel extends ParseObject
{

    public static $className = 'PlaceHolder';

    public static function query() {
        return new ParseQuery(self::$className);
    }

}

还有这个子类

<?php

class Post extends BaseModel
{

    public static $className = 'Post';

}

当我调用 Post::$className 时,我得到“Post”,但当我使用 Post::query() 时,它使用父类值“PlaceHolder”。

为什么继承的静态函数使用父类的值?

【问题讨论】:

  • query 函数在父类中,因此self 将始终是父类,您在另一个类中重新定义变量并不重要。跨度>
  • 简单的解决方案是将类名作为参数传入。

标签: php oop inheritance static


【解决方案1】:

query 函数在父类中定义,因此将使用该类的值。这是self 关键字的限制。您需要查看Late Static Binding 来解决这个问题。

public static function query() {
    return new ParseQuery(static::$className);
}

【讨论】:

    猜你喜欢
    • 2010-10-06
    • 1970-01-01
    • 2013-05-09
    • 2023-03-14
    • 1970-01-01
    • 2014-10-08
    • 2012-09-22
    • 2010-11-10
    相关资源
    最近更新 更多