簡體   English   中英

無法從 PHP 中的父靜態方法訪問子靜態屬性

[英]Cannot access child static property from parent static method in PHP

我的 PHP 代碼有問題。 我有三個類命名為

  1. 數據庫對象
  2. 文件
  3. 用戶圖片

它們從父類到子類的繼承樹是DatabseObect->File->user_picture user_picture 中,我有一個靜態屬性 $table_name,我用它來了解每個類的數據庫表名,並且在DatabaseObject類中有一些常見的數據庫函數。 我正在使用的函數的代碼在這里

DatabaseObject 類的代碼

public static function find_by_field($field="", $value="")
{
    $result_array = self::find_by_sql("SELECT * FROM ".static::$table_name." WHERE {$field} = '".$value."'"); //Line 52
    if(empty($result_array))
    {
        return false;
    }
    else
    {
        $object = static::instantiate(array_shift($result_array));
        return $object;
    }
}

文件類代碼

public $errors=array();

public $file_before_upload; // General file tyoe that has been uploaded from the form
public $id = 0;
public $size;
public $file_name;
public $file_type;
public $user_id;

protected $temp_path;
//protected static $upload_dir="";

protected $upload_errors = array(
    // http://www.php.net/manual/en/features.file-upload.errors.php
    UPLOAD_ERR_OK               => "No errors.",
    UPLOAD_ERR_INI_SIZE     => "Larger than upload_max_filesize.",
    UPLOAD_ERR_FORM_SIZE    => "Larger than form MAX_FILE_SIZE.",
    UPLOAD_ERR_PARTIAL      => "Partial upload.",
    UPLOAD_ERR_NO_FILE      => "No file.",
    UPLOAD_ERR_NO_TMP_DIR => "No temporary directory.",
    UPLOAD_ERR_CANT_WRITE => "Can't write to disk.",
    UPLOAD_ERR_EXTENSION    => "File upload stopped by extension."
);
public static function get_file_by_user($id = 0){
       return DatabaseObject::find_by_field("user_id",$id); //Line 164
    }

user_picture 類的代碼

protected static $table_name = "user_images";
    protected static $db_fields = array('id','file_name','file_type','size','user_id');

    public static $upload_dir ="uploads".DS."user_img";
    protected static $file_upload_limit = 15;


    public static function get_image_by_user($id = 0)
    {
        return File::get_file_by_user($id);  //Line 45
    }

我在user_picture 中調用上層函數的地方

$user_image = user_picture::get_image_by_user($session->user_id);

$user_picture_path="";

if(!$user_image)
{
    $user_picture_path = $user_image::upload_dir.DS."default.png";
}
else{
    $user_picture_path = $user_image::file_path(); //Line 28
}

這段代碼給了我以下錯誤

致命錯誤:未捕獲錯誤:訪問未聲明的靜態屬性:DatabaseObject::$table_name in C:\\xampp\\htdocs\\inventory-management\\includes\\database\\DatabaseObject.php:52 堆棧跟蹤:

0 C:\\xampp\\htdocs\\inventory-management\\includes\\general\\File.php(164): DatabaseObject::find_by_field('user_id', '29')

1 C:\\xampp\\htdocs\\inventory-management\\includes\\user\\user_picture.php(45): File::get_file_by_user('29')

2 C:\\xampp\\htdocs\\inventory-management\\public\\admin\\layouts\\admin\\header\\Navigation.php(28): user_picture::get_image_by_user('29')

3 C:\\xampp\\htdocs\\inventory-management\\public\\admin\\layouts\\admin\\header\\admin_header.php(21): require_once('C:\\xampp\\htdocs...')

4 C:\\xampp\\htdocs\\inventory-management\\public\\admin\\add_page_category.php(44): require_once('C:\\xampp\\htdocs...')

5 {main} 在C:\\xampp\\htdocs\\inventory-management\\includes\\database\\DatabaseObject.php52行中拋出

請如果有人可以幫忙!

謝謝,

你必須調用self而不是Database::File::

public static function get_image_by_user($id = 0)
{
    return self::get_file_by_user($id);  //Line 45
}

public static function get_file_by_user($id = 0){
   return self::find_by_field("user_id",$id); //Line 164
}

工作示例:

class A {
    static public function foo() {
        var_dump(static::$bar);
    }
}
class B extends A {
    static protected $bar = "12";

    static public function zoo(){
        self::foo();
    }
}

B::zoo();

不工作的例子:

class A {
    static public function foo() {
        var_dump(static::$bar);
    }
}
class B extends A {
    static protected $bar = "12";

    static public function zoo(){
        A::foo();
    }
}

B::zoo();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM