繁体   English   中英

PHP OOP:如何访问静态字段和对象?

[英]PHP OOP: How can I access static field and object?

我想在另一个类中调用getAllPersons(),但是收到错误消息:

致命错误:无法将非静态Core \\ Model :: $ db声明为静态Models \\ Person :: $ db

class Person extends Model {
    protected static $db;
    protected static $table = 'person';


    function __construct() {
        parent::__construct ();
        self::$db = Database::get ();
    }


    public static function getAllPersons() {
        return self::$db->select ( "SELECT personID, firstname, lastname FROM " . PREFIX . self::$table );
        // $db->select is not static
    }
}

Another.php:

$data ['persons'] = Person::getPersons ();

错误消息告诉您所有您需要了解的内容。 Model类中,有一个变量$db ,它被声明为常规属性,而不是静态属性。 当您尝试声明另一个$db变量,但将其更改为静态变量时,PHP会引发您收到的错误。

您不能扩展非静态(公共)属性或类AS static的方法, 反之亦然
您必须应用与父类相同的访问修饰符 ,或者在类中重命名属性(方法)

问题在于self::$db (例如,在getAllPersons函数中)始终引用在Person类(未定义)上声明的$ db。 在代码中尝试以下操作(将self ::更改为static::):

function __construct() {
        parent::__construct ();
        static::$db = Database::get (); 
    }

一旦您初始化类的对象,前者将允许构造函数初始化$ db var。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM