Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Call to a member function
Форумы портала PHP.SU » » Объектно-ориентированное программирование » Call to a member function

Страниц (1): [1]
 

1. KoDeRSmerT - 07 Мая, 2014 - 18:05:13 - перейти к сообщению
привет.

есть два класса
PHP:
скопировать код в буфер обмена
  1.  
  2. class Check  {
  3. public $result=array();
  4.        
  5.         function login($company,$leqeb,$pass){
  6.         $count = $this->db->sql("SELECT fc_id FROM " . DB_PREFIX . "id WHERE fc_name = '" . $this->db->escape($company) . "' and fc_id in (select fc_us from " . DB_PREFIX . "us where fc_login='" . $this->db->escape($leqeb) . "' and fc_sifre='" . $this->db->escape($pass) . "' limit 1) ")->say;
  7.         if($count<0){
  8.         //log error
  9.         }
  10.         if($count>0){$this->result[]='login_error';}
  11.         }
  12.        
  13.  
  14.        
  15. }


и

PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3. class DB {
  4.         private $driver;
  5.        
  6.         public function __construct($driver, $hostname, $username, $password, $database) {
  7.                 if (file_exists(DIR_DATABASE . $driver . '.php')) {
  8.                         require_once(DIR_DATABASE . $driver . '.php');
  9.                 } else {
  10.                         exit('Error: Could not load database file ' . $driver . '!');
  11.                 }
  12.                                
  13.                 $this->driver = new $driver($hostname, $username, $password, $database);
  14.         }
  15.                
  16.         public function sql($sql) {
  17.                 return $this->driver->query($sql);
  18.         }
  19.        
  20.         public function escape($value) {
  21.                 return $this->driver->escape($value);
  22.         }
  23.        
  24.         public function say() {
  25.                 return $this->driver->countAffected();
  26.         }
  27.  
  28.         public function getLastId() {
  29.                 return $this->driver->getLastId();
  30.         }      
  31. }
  32. ?>
  33.  


пишу код

PHP:
скопировать код в буфер обмена
  1.  
  2.  
  3. $db = new DB(DB_DRIVER, DB_HOSTNAME, DB_USERNAME, DB_PASSWORD, DB_DATABASE);
  4.  
  5. $check_fc = new Check;
  6. $check_fc->login($company,$leqeb,$pass);
  7.  
  8.  


результат

Fatal error: Call to a member function sql() on a non-object in Y:\home\ode.az\www\fc_system\fc_library\check.php on line 20


в чем проблема? спс заранее.
2. esterio - 07 Мая, 2014 - 18:26:46 - перейти к сообщению
А как екземпляр DB оказалася внутри Check? Либо global $db либо передать в конструкто (что более предпочтительней). Или курим синглтон
3. KoDeRSmerT - 07 Мая, 2014 - 18:33:13 - перейти к сообщению
esterio пишет:
А как екземпляр DB оказалася внутри Check? Либо global $db либо передать в конструкто (что более предпочтительней). Или курим синглтон


global попробовал. работает спс.
а второй и третий вариант вообще не понял )) я первый раз работаю над классами. но без классов отлично разбираюсь в пхп. конструктор знаю что. но не понял какое отношение имеет на эту проблему ) если есть возможность обясните пожалуйста второй вариант.
4. Мелкий - 07 Мая, 2014 - 18:55:09 - перейти к сообщению
KoDeRSmerT пишет:
без классов отлично разбираюсь в пхп

И ни разу не слышали об областях видимости?
Даже о том, что с выключенными ошибками ничего никогда не пишут?
Уж сколь во многом в php мне самому далеко до "отлично разбираюсь", но такое?..

 

Powered by ExBB FM 1.0 RC1