Member 10691161 Ответов: 2

Фатальная ошибка: непойманные ошибка: используя $this, когда не в контексте объекта


Я написал класс для автоматизации создания экземпляров, который выглядит следующим образом :


<?php

class user{
 protected static $db_table = "users";
 protected static $db_table_fields = array('username ' , 'password' , 'firstname' , 'lastname');
    public $id;
    public $username;
    public $password;
    public $firstname;
    public $lastname;
    //protected static properties = self::get_properties();

    public static function find_user_by_id($id){
        global $database;
        $result_array = array();
  $sql = "SELECT * FROM users WHERE id = '$id'";
        $result = $database->db->query($sql);
        while ($fetch = $result->fetch_array()){

         $result_array[] = self::inst($fetch);

        }
        return array_shift($result_array);
        }




        public static function inst($fetch){

            $instance = new User();
            $var = $this->get_properties();
           // $var = get_object_vars($instance);
            foreach($fetch as $key => $value){

                if(array_key_exists($key , $var)){

                    $instance->$key = $value;

                }

            }

            return $instance;

        }

        public function get_properties(){

           $properties = array();
            $tables = Self::$db_table_fields;
            foreach($tables as $field){

               if(property_exists($this , $field))

               {
                    $properties[] = $this->$field;

               }

            }

            return properties;

        }


    }

?>



и я получаю фатальная ошибка: непойманные ошибка: используя $this, когда не в контексте объекта в /var/ВСП/клиентам/client0/web6/веб/админ/admin_includes/пользователей.РНР:33 трассировка стека: #0 /var/www/clients/client0/web6/web/admin/admin_includes/user.php(20): пользователь::инст(массив) #1 /var/www/clients/client0/web6/web/admin/index.php(52): пользователь::find_user_by_id(17) #2 {главная} брошены в /var/www/clients/client0/web6/web/admin/admin_includes/user.php по строке 33 при звонке , пожалуйста, помогите мне исправить это.

Что я уже пробовал:

Я пытался сделать функции публичными, но тоже потерпел неудачу.

2 Ответов

Рейтинг:
2

Jochen Arndt

Вы используете $this в static функция члена класса:

public static function inst($fetch){
    $instance = new User();
    $var = $this->get_properties();

Вы должны либо сделать функцию нестатичной, либо сделать ее get_properties() статический. Но последнее, вероятно, не имело бы смысла.

Смотреть также PHP: статическое Ключевое слово-руководство пользователя[^]:
Цитата:
Поскольку статические методы вызываются без экземпляра созданного объекта, псевдопеременная $this недоступна внутри метода, объявленного как статический.


Рейтинг:
1

CPallini

Цитата:
$instance = новый пользователь();
из $VAR = $это-&ГТ;get_properties();

Возможно, вы имели в виду
$instance = new User();
$var = $instance->get_properties();