繁体   English   中英

如何在PHP类中声明静态变量,但在扩展基类的类中定义它?

[英]How do I declare a static variable in a PHP class but define it in a class which extends the base class?

我有一个DatabaseObject类,它定义了select,insert,update和delete方法。 该类的目的是将MySQL数据库中的行子集表示为PHP对象。 构造函数调用MySQL的SELECT命令,析构函数调用DELETE命令(除非我不这样做)。

这是我的DatabaseObject类:

class DatabaseObject {  
    protected $table;
    protected $index_field;

    private $data;

    function __construct($id) {
        //MySQL SELECT and assign resource to data
    }

    function __destruct() {
        //MySQL UPDATE
    }

    public function insert($data) {
        global $db;     //Database Class for using MySQL

        $fields = array();
        $values = array();

        foreach ($data as $field => $value) {
            $fields[] = "`".$field."`";
            $values[] = "'".$db->escape($value)."'";
        }

        $sql = "INSERT INTO ".$this->table." (".join(', ', $fields).") VALUES (".join(', ', $values).")";
        if($db->query($sql)) {
            return $db->insertID();
        } else {
            return false;
        }
    }

    //More methods; update(), delete(), select()
}

当我想访问特定的表时,我扩展了DatabaseObject类。 例如,我的User类用于我的用户表。 这里是:

class User extends Object {
    public static $anonymous_data = array('user_id' => 0, 'user_level' => ANONYMOUS, 'username' => 'Anonymous');

    function __construct($user_id = NULL) {
        global $db;
        $this->db = $db;

        $this->table = USER_TABLE;
        $this->index_field = 'user_id';

        parent::__construct($user_id);
    }

    function __destruct() {
        parent::__destruct();
    }

    //Other user methods; login(), logout() etc.
}

现在,我希望能够从用户类调用insert方法,而无需实例化User类。 我很确定,我必须让它静止。 如何使insert方法保持静态,但仍然允许它使用扩展类中定义的表?

换句话说,我希望能够做到这一点:

User::insert($data);        //INSERT into user table
AnotherClass::insert($data);    //INSERT into another table

...没有实例化任何一个类。

<?php
class Foo {
    public static $anonymous_data = array();

    public static function aStaticMethod() {
        self::$anonymous_data = array(key, value);

        foreach (self::$anonymous_data as $key => $value) {
             echo "$key => $value";
        }
    }
}

Foo::aStaticMethod();
$classname = 'Foo';
$classname::aStaticMethod(); // As of PHP 5.3.0
?>

对于静态方法。 但请注意,静态变量不能以这种方式访问​​。 在这里阅读有关此示例和静态关键字的更多信息: PHP.net

更新:使用self而不是$this->示例。

暂无
暂无

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

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