Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.08.2011, 12:23   #1
Jakethefish
Форумчанин
 
Регистрация: 13.11.2009
Сообщений: 121
По умолчанию Notice: Trying to get property of non-object. для property of static property

Имею такую структуру:
статик класс Loader, выполняющий функцию сервиса имеет статичное свойство $db
$db это что-то вроде mysql wrapper-a.
До какоо-то определенного момента все работало без проблем, сейчас же получаю такую ошибку:
Notice: Trying to get property of non-object.....

конкретно куски кода вызывающие еррор:

PHP код:
class Loader extends AObject{
    private static 
$db;
    
    public static function 
getDB() {
        if (
self::$db == null)
            
self::$db = new CSqlRat();
        return 
self::$db;
    }
... 
PHP код:

<?php
class CSqlRat {

    var 
$host="localhost";
    var 
$user="user";
    var 
$password="password";
    var 
$dbname="database";
    
    var 
$query "";
    var 
$numOfResults 0;
    var 
$results = array();
    var 
$currentResult 0;


    function 
__construct($host ""$user ""$password ""$dbname "") {
        if(
$host !== ""$this->host $host;
        if(
$user !== ""$this->user $user;
        if(
$password !== ""$this->password $password;
        if(
$dbname !== ""$this->dbname $dbname;
         if (
$this->host == "" || $this->user == "" || $this->password == "") { //if missing parameters, show error.
            
$this->criticalError("Missing arguments for database connection!");
        } 
        if (!
mysql_connect($this->host$this->user$this->password)) {
            
$this->criticalError("Failed to connect to database!");
        }

        if (
$this->dbname !== ""$this->query("use $this->dbname;");
        if(
mysql_errno() == 1049$this->criticalError("Failed to select a database!");
    }
Ошибка на этой линии: if($this->host == "" || $this->user == "" || $this->password == "")

Насколько я понимаю ошибка связана с тем что я пытаюсь получить свойство несуществующего объекта. Никак не могу понять где моя ошибка, так как это конструктор, который вызывается как раз при создании нового объекта.

Несколько дней назад все работало как часы. Сейчас работает через раз, вероятно в сессии после неудачного запроса объект создается.

Прошу любых дельных советов и решений.
Заранее благодарю за ваше время.

Последний раз редактировалось Jakethefish; 12.08.2011 в 12:35.
Jakethefish вне форума Ответить с цитированием
Старый 12.08.2011, 14:16   #2
Cronos20
Форумчанин
 
Регистрация: 08.07.2010
Сообщений: 679
По умолчанию

Сделайте в конструкторе в начале и конце var_dump($this)

Последний раз редактировалось Cronos20; 12.08.2011 в 14:22.
Cronos20 вне форума Ответить с цитированием
Старый 12.08.2011, 16:08   #3
dem66
Форумчанин
 
Регистрация: 31.05.2011
Сообщений: 316
По умолчанию

Цитата:
Сообщение от Jakethefish Посмотреть сообщение
Ошибка на этой линии: if($this->host == "" || $this->user == "" || $this->password == "")
Нет. Ошибка не в этой линнии. Весь нижний класс работает. Я толькочто проверил. Ошибка кроется в верхнем.

---Добавлено --

Проверил весь код, Проблем не обнаружелось. Все отлично работает, разве только $this->query("use $this->dbname;"); ругнулось, но это не в тему.

Весь код пашет

Последний раз редактировалось dem66; 12.08.2011 в 16:17.
dem66 вне форума Ответить с цитированием
Старый 15.08.2011, 15:14   #4
Jakethefish
Форумчанин
 
Регистрация: 13.11.2009
Сообщений: 121
По умолчанию

Ошибку в сабже я получаю на этой линии:
Код:
if($this->host == "" || $this->user == "" || $this->password == ""
То есть получается возникают какие-то экстраординарные обстоятельства, которые способствуют данной ошибке?
Jakethefish вне форума Ответить с цитированием
Старый 15.08.2011, 16:14   #5
8oOoRPM
Форумчанин
 
Регистрация: 12.11.2010
Сообщений: 146
По умолчанию

при инициализации объекта в статичесском методе проверяйте не на null, а функцией is_object()....

потому как в показанной вами линии никак ошибки быть не должно... имхо- вообще не понимаю к чему она если по любому они пустыми не будут...

П.С. для проверки не нужно использовать empty()...
8oOoRPM вне форума Ответить с цитированием
Старый 15.08.2011, 18:50   #6
dem66
Форумчанин
 
Регистрация: 31.05.2011
Сообщений: 316
По умолчанию

Цитата:
Сообщение от 8oOoRPM Посмотреть сообщение
П.С. для проверки не нужно использовать empty()...
не нужно? Вы ничего не перепутали?

С empty это все выглядит куда лучше.
У автора
Код:
if($this->host == "")
а можна сделать просто
Код:
if(empty($this->host))
dem66 вне форума Ответить с цитированием
Старый 15.08.2011, 23:17   #7
TranceSmile
Смайлик :)
Форумчанин
 
Аватар для TranceSmile
 
Регистрация: 12.12.2010
Сообщений: 445
По умолчанию

Код:
if(!empty(trim($host))) $this->host = $host;
        if(!empty(trim($user))) $this->user = $user;
        if(!empty(trim($password)))) $this->password = $password;
        if(!empty(trim($dbname) $this->dbname = $dbname;
         if((empty(trim($this->host))) || (empty(trim($this->user))) || (empty(trim($this->password))))
Попробуйте так. С чем черт не шутит
Самый перспективный framework Yii (c)

Последний раз редактировалось TranceSmile; 15.08.2011 в 23:21.
TranceSmile вне форума Ответить с цитированием
Старый 16.08.2011, 12:02   #8
Jakethefish
Форумчанин
 
Регистрация: 13.11.2009
Сообщений: 121
По умолчанию

Всем привет.

Спасибо за ответы.

На данный момент статус такой: вероятно по каким-то причинам создавались какие-то экстраординарные условия, при которых не загружался в память данный класс, либо неправильно воспринимался статик модифайер, либо не хватало памяти, либо ещё что-то.
Так как на данный момент скрипт работает без запинки.
Почему я предполагаю что проблема в памяти? Возникла данная ошибка, когда каждые 2 минуты при помощи crontab выполнялась команда lynx ....com/file.php(как ни странно php path/file.php не сработала), которая запускала другой скрипт использовавший доступ к БД. Когда же я выключил, то ошибки прекратились. Сервер ВПС, проекты лежат в разных директориях и никак не пересекаются, разве что выполняются на одной машине и БД одна.
Jakethefish вне форума Ответить с цитированием
Старый 16.08.2011, 16:09   #9
8oOoRPM
Форумчанин
 
Регистрация: 12.11.2010
Сообщений: 146
По умолчанию ...

Короче я то и хотел написать что нужно с empty() ;D...
8oOoRPM вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Doc Property как???? pingvi Microsoft Office Word 3 16.01.2013 19:42
property ParentBackground TPanel DedBoroda Общие вопросы Delphi 2 24.10.2010 06:12
Работа с property anGeee Общие вопросы Delphi 3 08.01.2010 20:12
Помогите с Property!!!(Delphi) Образец№7 Помощь студентам 2 21.10.2009 00:28