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 :: Версия для печати :: Fatal error: Using $this when not in object context
Форумы портала PHP.SU » » Объектно-ориентированное программирование » Fatal error: Using $this when not in object context

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

1. SkaN - 10 Июля, 2011 - 19:28:11 - перейти к сообщению
PHP:
скопировать код в буфер обмена
  1. class MySQL {
  2.         var $server;
  3.         var $login;
  4.         var $password;
  5.         var $db;
  6.  
  7.         function connect($server, $login, $password, $db) {
  8.                 $this->server = $server;
  9.                 $this->login = $login;
  10.                 $this->password = $password;
  11.                 $this->db = $db;
  12.                
  13.                 mysql_connect($server, $login, $password);
  14.                 mysql_select_db($db);
  15.         }
  16. }

Вот такой вот простенький код, с первого взгляда должен работать. Он вызывается этим кодом:
PHP:
скопировать код в буфер обмена
  1. include 'includes/mysql.php';
  2. MySQL::connect('localhost', 'root', '***', 'skan_blog');

Но встроенный дебаггер выдает мне сообщение из заголовка. Что интересно, в отчете об ошибке есть значения всех переменных:
PHP:
скопировать код в буфер обмена
  1. Variables in local scope (#2): $db = 'skan_blog' $login = 'root' $password = '***' $server = 'localhost'

(Добавление)
Если добавить объект на класс и вызвать метод через объект, то не происходит ничего, запрос к базе не посылается, а метод не факт, что вообще выполняется (проверено if'ом):
PHP:
скопировать код в буфер обмена
  1. include 'includes/mysql.php';
  2. $mysql = new MySQL;
  3. $mysql->connect('localhost', 'root', '***', 'skan_blog');
2. OrmaJever - 10 Июля, 2011 - 20:23:23 - перейти к сообщению
PHP:
скопировать код в буфер обмена
  1. MySQL::connect('localhost', 'root', '***', 'skan_blog');

1) метод который так вызывается должен быть статическим
2) в статических методах недолжно быть переменой $this. Потому что это указатель на объект которого нету при вызове статических методов.
SkaN пишет:
Если добавить объект на класс и вызвать метод через объект, то не происходит ничего, запрос к базе не посылается, а метод не факт, что вообще выполняется (проверено if'ом):

а что должно произойти? Посмотрите метод connect(), в нём нету ни вывода ни return'a, а соединение с базой вы так не увидите Подмигивание
3. DeepVarvar - 10 Июля, 2011 - 20:53:46 - перейти к сообщению
self::server = $server; и т.д...
4. SkaN - 11 Июля, 2011 - 08:18:06 - перейти к сообщению
DeepVarvar пишет:
self::server = $server;

спасибо) я первый раз работал с классами, еще не очень такие маленькие нюансы понимал
(Добавление)
PHP:
скопировать код в буфер обмена
  1.         function connect($server, $login, $password, $db) {
  2.                 self::server = $server;
  3.                 self::login = $login;


PHP:
скопировать код в буфер обмена
  1. Parse error: syntax error, unexpected '=' in /var/www/skanblog/includes/mysql.php on line 20


20-я строчка это та, которая посередине. там вроде бы все на месте...
5. SkaN - 11 Июля, 2011 - 11:16:25 - перейти к сообщению
явно что-то не так во всех присвоениях переменным значений. Потому что эта ошибка показывает на эту строчку и ей подобные.
(Добавление)
OrmaJever пишет:
метод который так вызывается должен быть статическим

до меня наконец-то это дошло. Всем свойствам и методам прописал static, но теперь дебаггер ругается так:
PHP:
скопировать код в буфер обмена
  1. Parse error: syntax error, unexpected T_VAR, expecting T_VARIABLE on line 3

Ругается на эту строчку:
PHP:
скопировать код в буфер обмена
  1. static var $server;
6. OrmaJever - 11 Июля, 2011 - 11:42:40 - перейти к сообщению
1) не self::server а self::$server
2) static public $server;
7. DeepVarvar - 11 Июля, 2011 - 12:18:23 - перейти к сообщению
OrmaJever да - я торопился написать ответ - очепятка вышла.
8. SkaN - 11 Июля, 2011 - 12:19:20 - перейти к сообщению
спасибо...)
(Добавление)
PHP:
скопировать код в буфер обмена
  1. Parse error: syntax error, unexpected T_VAR, expecting T_VARIABLE on line 3

Ругается на эту строчку:
PHP:
скопировать код в буфер обмена
  1. static public var $server;



это осталось по-прежнему.
(Добавление)
убрал везде var и он перестал ругаться на ошибку. Теперь просто не работает)
(Добавление)
PHP:
скопировать код в буфер обмена
  1. self::$server


эта фигня вообще не нужна, без нее все работает. Это так, если кто еще лоханется, как я

 

Powered by ExBB FM 1.0 RC1