Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 04.09.2014, 14:25
Аватар для Duda.Ml1986@gmail.com
Профессор
Отправить личное сообщение для Duda.Ml1986@gmail.com Посмотреть профиль Найти все сообщения от Duda.Ml1986@gmail.com
 
Регистрация: 01.09.2011
Сообщений: 263

Using $this when not in object context Внутри класса
class ErrorReporting {

    protected $tableName;
    protected static $_instance;
    protected  $DB;

    public function __construct()
    {
        $this->DB = DB::getInstance();
        $this->tableName = 'error_reporting';
    }

    public static function getInstance() {
        // проверяем актуальность экземпляра
        if (null === self::$_instance) {
            // создаем новый экземпляр
            self::$_instance = new self();
        }
        // возвращаем созданный или существующий экземпляр
        return self::$_instance;
    }

    public static function setError($where, $what)
    {
        $sql = '';

А ТУТ НЕДОСТУПНА $this->tableName, почему недоступна, потому что метод статический, как увидеть?


        $sql = "INSERT INTO `error_reporting` (`where`, `what`, `date`, `ip`) VALUES ('".$where."',
                '".$what."','".date('Y-m-d H:m:s')."','".self::GetRealIp()."'
        )";

        self::writeError($sql);

    }

    protected function writeError($sql)
    {
       [B] $response = $this->DB->Insert($sql);[/B]
ВОТ НА ЭТУ СТРОКУ И МАТЕРИТСЯ 
"Using $this when not in object context"



        /*if ($response == 1) {
            return $this->DB->LastInsertId();
        } else {
            // ошибка при первом запросеa
            $this->error = $this->DB->getError();
            return false;
        }*/
    }

    private function GetRealIp()
    {
        if (!empty($_SERVER['HTTP_CLIENT_IP']))
        {
            $ip=$_SERVER['HTTP_CLIENT_IP'];
        }
        elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR']))
        {
            $ip=$_SERVER['HTTP_X_FORWARDED_FOR'];
        }
        else
        {
            $ip=$_SERVER['REMOTE_ADDR'];
        }
        return $ip;
    }
}



Как обратиться к другому обьекту который уже определен в переменной класса?
Ответить с цитированием
  #2 (permalink)  
Старый 04.09.2014, 14:37
Профессор
Отправить личное сообщение для WorM32 Посмотреть профиль Найти все сообщения от WorM32
 
Регистрация: 11.02.2014
Сообщений: 303

Ну дык у вас же $_instance есть, вот через него и вызывайте методы класса.
Ответить с цитированием
  #3 (permalink)  
Старый 04.09.2014, 15:21
Аватар для Duda.Ml1986@gmail.com
Профессор
Отправить личное сообщение для Duda.Ml1986@gmail.com Посмотреть профиль Найти все сообщения от Duda.Ml1986@gmail.com
 
Регистрация: 01.09.2011
Сообщений: 263

Сообщение от WorM32 Посмотреть сообщение
Ну дык у вас же $_instance есть, вот через него и вызывайте методы класса.
Да не совсем в нем. Например

<?php

class DB{

    protected $mysqli;                                    // обьект работы с БД
    public $last_insert_id;                               //id последней измененной(INS/UPD/DEL) записи в БД
    public $error;

    private $host;
    private $login;
    private $pass;
    private $db_name;


    protected static $_instance;

    public function __construct(){

        /*
         * Данные для подключения к БД.
         */

        include_once('m/M_Constants.php');
        $M_Constants = Constants::Instance();



		$this->host = $M_Constants->host;
		$this->login = $M_Constants->login;
		$this->pass = $M_Constants->pass;
		$this->db_name = $M_Constants->db_name;
  	}

    private function Greate_Connect()
    {
        $this->mysqli = new mysqli($this->host, $this->login, $this->pass, $this->db_name);
        if (mysqli_connect_errno($this->mysqli))
        {
            $this->error .= "M_DB_Greate_Connect Не удалось подключиться к MySQL: " . mysqli_connect_error();
            //$this->error .= "M_DB_Greate_Connect Не удалось подключиться к MySQL: " . mysqli_connect_error();
        }
        $this->mysqli->set_charset("utf8");
    }

    public function getError() {
        return $this->error;
    }
    /**
     * Selecting from DB
     *
     * @param string $string - sql query
     *
     * @return array $data_array - array of selected data
     * @return NULL $data_array
     */
    function Select($string)
    {
        // подключение к ДБ
        $this->Greate_Connect();
        // запрос, в случае успеха true, 1
        if (!$result = $this->mysqli->query($string))
        {
            $this->error .= "M_DB_Select Неудалось выбрать из базы: %s\n" . $this->mysqli->errno . "<br/>" . $string;
            return false ;
        }else {
            while ($row = mysqli_fetch_array($result,MYSQL_ASSOC)) {
                $data_array[]=$row;
            }
            //закрытие соединения
            $this->mysqli->close();
            if(isset($data_array[1])) {
                return $data_array;
            } else {
                return $data_array[0];
            }
        }
    }

    public static function getInstance() {
        // проверяем актуальность экземпляра
        if (null === self::$_instance) {
            // создаем новый экземпляр
            self::$_instance = new self();
        }
        // возвращаем созданный или существующий экземпляр
        return self::$_instance;
    }

    // Insert в базе ,
    // return в случае успеха true or 1, false = 0, NULL
    function Insert($string)
    {
        // подключение к ДБ
        $this->Greate_Connect();
        // запрос, в случае успеха true, 1
        if (!$result = $this->mysqli->query($string))
        {
            $this->error .= "M_DB_Insert Неудалось записать в базу: %s\n" . $this->mysqli->error;
            return false ;
        }
        // запись id последней вставленной записи записи
        $this->last_insert_id = $this->mysqli->insert_id;
        //закрытие соединения
        $this->mysqli->close();
        return $result;
    }

    // Update в базе ,
    // return в случае успеха true or 1, false = 0, NULL
    function Update($string)
    {
        // подключение к ДБ
        $this->Greate_Connect();
        // запрос, в случае успеха true, 1
        if (!$result = $this->mysqli->query($string))
        {
            $this->error = "M_DB_Update Неудалось проапдейтить запись в базе: %s\n" . $this->mysqli->error;
        }
        // запись id последней обновленной записи
        $this->last_insert_id = $this->mysqli->insert_id;
        //закрытие соединения
        $this->mysqli->close();
        return $result;
    }

    // Delete в базе ,
    // return в случае успеха true or 1, false = 0, NULL
    function Delete($string)
    {
        // подключение к ДБ
        $this->Greate_Connect();
        // запрос, в случае успеха true, 1
        if (!$result = $this->mysqli->query($string))
        {
            $this->error .= "M_DB_Delete Неудалось удалить из базы: %s\n" . $this->mysqli->error;
        }
        // запись id последней удвления записи/ей
        $this->last_insert_id = $this->mysqli->insert_id;
        //закрытие соединения
        $this->mysqli->close();
        return $result;
    }

    // Возвразает id последней измененной записи
    // return int
    function LastInsertId()
    {
        return $this->last_insert_id;
    }

    private function __clone(){
    }

}
?>
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Использование классов в JavaScript devote Ваши сайты и скрипты 70 01.02.2013 17:17
Передача this при обращение к объекту внутри класса ugin_root Общие вопросы Javascript 9 14.08.2012 16:26
Нестыковка при расширении класса Object PRStudio Общие вопросы Javascript 7 16.07.2012 02:55
Передача события обработчику внутри класса SuperDennis Events/DOM/Window 4 29.02.2012 18:41
Использование $(this) внутри функции Dorian_bs Общие вопросы Javascript 6 21.11.2011 11:10