静态方法和继承:为什么一个类的静态属性的值转到另一个类? ' get_called class'

时间:2017-01-06 13:29:39

标签: php inheritance static-methods

我有一个代码:

<?php

abstract class Model
{
    static protected $_table;

    static public function setTable()
    {
        self::$_table = get_called_class();
    }

    static public function getTable()
    {
        if(!isset(self::$_table)) {
            self::setTable();
        }
        return self::$_table;
    }

}

class User extends Model {}
class Post extends Model {}

echo User::getTable();
echo "<br>";
echo Post::getTable();

?>

回显它的输出是:&#34;用户用户&#34;。我无法理解为什么属性的价值会归于另一个人的价值。为什么没有第二个回声给出了帖子&#39;输出?我错了什么?

1 个答案:

答案 0 :(得分:0)

因为您正在使用静态属性,所以在第一次设置Model::$_table后,您的类不会再次设置它。除非您更改Model::getTable()功能,否则每次都会调用self::setTable()

您还可以创建Model作为特征而不是传统类。

例如:

trait class Model
{
    static protected $_table;

    static public function setTable()
    {
        self::$_table = get_called_class();
    }

    static public function getTable()
    {
        if(!isset(self::$_table)) {
            self::setTable();
        }
        return self::$_table;
    }

}

class User {
    use Model;
}

class Post {
    use Model;
}

echo User::getTable();
echo "<br>";
echo Post::getTable();