Не удается получить доступ к дочернему статическому свойству из родительского статического метода в переполнении стека

У меня возникли некоторые проблемы в моем коде PHP. У меня есть три класса, названных как

  1. DatabaseObject
  2. файл
  3. user_picture

И их наследуемое дерево от родительского к дочернему классу DatabseObect-> Файл-> 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 в 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 \ инвентаризация-управление \ public \ admin \ layouts \ admin \ header \ admin_header.php (21): require_once (‘C: \ xampp \ htdocs …’)

4 C: \ xampp \ htdocs \ warehouse-management \ public \ admin \ add_page_category.php (44): require_once (‘C: \ xampp \ htdocs …’)

5 {главная}
брошенный в C: \ XAMPP \ HTDOCS \ инвентаризации управление \ включает \ базы данных \ DatabaseObject.php онлайн 52

Пожалуйста, если кто-нибудь может помочь!

Спасибо,

-2

Решение

Вы должны позвонить 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();
2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]