PHP静态成员继承

PHP static member inheritance

我有这个基地class:

<?php

use Parse\ParseObject;
use Parse\ParseQuery;

class BaseModel extends ParseObject
{

    public static $className = 'PlaceHolder';

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

}

还有这个childclass

<?php

class Post extends BaseModel
{

    public static $className = 'Post';

}

当我调用 Post::$className 我得到 'Post' 但是当我使用 Post::query() 它使用 parent classes 值 'PlaceHolder'。

为什么继承的静态函数使用 parent class 的值?

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

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