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);
}
我有这个基地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);
}