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 :: Версия для печати :: Ошибка в простом классе с 1ой функцией [2]
Форумы портала PHP.SU » » Объектно-ориентированное программирование » Ошибка в простом классе с 1ой функцией

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

16. Конструктор - 23 Августа, 2011 - 19:18:41 - перейти к сообщению
Немного запутался с функцией.
А в чем разница обращения к финкции из класса,
или если в случае обращения вне класса?
У меня все вызовы функций будут внешними, но хотелось бы и разницу понять
17. DeepVarvar - 23 Августа, 2011 - 19:20:06 - перейти к сообщению
Конструктор пишет:
все переменные для всех функций надо будет присваивать в конструкторе?
Нет, можно сделать несколько методов:

...connect();
...selectDB();
...close();
...setCharset();
...queryCount();

и т.д.....
18. DeertOff - 23 Августа, 2011 - 19:20:47 - перейти к сообщению
Необязательно в классе определять все переменные!
Вам главное разобраться с тем что в определении функции(метода) не должно содержаться переменных
В вашем примере используете переменную - $this -> $database_name
в определении функции function delete_db($this -> $database_name){}
19. Конструктор - 23 Августа, 2011 - 19:32:59 - перейти к сообщению
А почему eclipse ругается если прописывать private ?
PHP:
скопировать код в буфер обмена
  1. class db1
  2. {
  3.         private $servername = 'localhost';
  4.         private $username = 'root';
  5.         private $password = 'root';    
  6.         private $database_name;

пишет : syntax error, unexpected 'private'
20. DeertOff - 23 Августа, 2011 - 19:33:11 - перейти к сообщению
не должен ругаться если у вас стоит закрывающая скобка
PHP:
скопировать код в буфер обмена
  1.  
  2.     class db1
  3.     {
  4.             private $servername = 'localhost';
  5.             private $username = 'root';
  6.             private $password = 'root';    
  7.             private $database_name;
  8.     }
  9.  

почитайте http://php.su/learnphp/phpoo/
21. Конструктор - 23 Августа, 2011 - 19:38:35 - перейти к сообщению
DeertOff пишет:
скобка есть но ругается сам эклипс
и Php тоже
CODE (htmlphp):
скопировать код в буфер обмена
  1. Parse error: syntax error, unexpected T_PRIVATE in C:\xampp\htdocs\test.loc\www\basa1.php on line 5
22. DeertOff - 23 Августа, 2011 - 20:06:52 - перейти к сообщению
возможно вы пытаетесь получить доступ к защищённому свойству "$username"; в не класса
возможно пропустили ";"
23. Конструктор - 23 Августа, 2011 - 21:46:24 - перейти к сообщению
короче вот что у меня получилось, и при этом оно работает:

PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. class db1
  3. {      
  4.         private $servername = 'localhost';
  5.         private $username = 'root';
  6.         private $password = 'root';
  7.  
  8.         /* *************************************
  9.          * Функция удаления базы данных.
  10.          * В функцию передается имя базы данных.
  11.          */
  12.         function delete_db($database_name)
  13.         {
  14.                 $con = mysql_connect( $this->servername , $this->username , $this->password );
  15.                         if (!$con)
  16.                         {
  17.                                 die( 'Could not connect: '.mysql_error() );
  18.                         }              
  19.                 /* Delete database */  
  20.                 if (mysql_select_db($database_name, $con))
  21.                 {
  22.                         mysql_query( "DROP DATABASE ".$database_name , $con ); 
  23.                 }
  24.                         else
  25.                         {
  26.                                 return 0;              
  27.                         }
  28.         mysql_close($con);     
  29.         }
  30. }
  31.  
  32. $x = new db1();
  33. $x -> delete_db('data1');
  34. ?>

__
главная ошибка была нелепой я писал лишний $ >>> $this->$username
24. Конструктор - 24 Августа, 2011 - 12:30:25 - перейти к сообщению
DeertOff пишет:
почитайте http://php.su/learnphp/phpoo/

кое что здесь уже устарело.. (например конструктор там по старому обьявляется именем класса, вместо __construct , и т.д.)
поэтому читаю здесь -> http://ru2.php.net/manual/en/lan...e.oop5.decon.php
_______
еще не до конца разобрался с конструктором,
почему получились ошибки в конструкторе? когда все без конструктора - ошибок нет:
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. class db1
  3. {      
  4.        
  5.         function __construct($param)
  6.         {
  7. /*ошибка*/      private $servername = 'localhost';
  8. /*ошибка*/      private $username = 'root';
  9. /*ошибка*/      private $password = 'root';
  10.                 $this->database_name = $param;
  11.         }
  12.         /* *************************************
  13.          * Функция удаления базы данных.
  14.          * В функцию передается имя базы данных.
  15.          */
  16.         function delete_db()
  17.         {
  18.                 $con = mysql_connect( $this->servername , $this->username , $this->password );
  19.                         if (!$con)
  20.                         {
  21.                                 die( 'Could not connect: '.mysql_error() );
  22.                         }              
  23.                 /* Delete database */  
  24.                 if (mysql_select_db($this->database_name, $con))
  25.                 {
  26.                         mysql_query( "DROP DATABASE ".$this->database_name , $con );   
  27.                 }
  28.                         else
  29.                         {
  30.                                 return 0;              
  31.                         }
  32.         mysql_close($con);     
  33.         }
  34. }
  35.  
  36. $x = new db1('test4');
  37. $x -> delete_db();
  38. ?>

CODE (htmlphp):
скопировать код в буфер обмена
  1. Parse error: syntax error, unexpected T_PRIVATE in C:\xampp\htdocs\test.loc\www\basa2.php on line 7

Так ошибки нет:
PHP:
скопировать код в буфер обмена
  1. function __construct($param)
  2.         {
  3.                 $this->servername = 'localhost';
  4.                 $this->username = 'root';
  5.                 $this->password = 'root';
  6.                 $this->database_name = $param;
  7.         }
Но в этом случае все переменные будут Private или нет?
25. DeepVarvar - 24 Августа, 2011 - 12:52:58 - перейти к сообщению
Сначала переменные надо объявить (описать) до конструктора и поставить им: приват, паблик, статик, протектед...

А уж потом в конструкторе присваивать им значения.
26. Конструктор - 24 Августа, 2011 - 12:55:58 - перейти к сообщению
DeepVarvar пишет:
Сначала переменные надо объявить

получается в предыдущем варианте у меня все по умолчанию pablic стало?
27. КЫР - 24 Августа, 2011 - 12:58:28 - перейти к сообщению
DeepVarvar
в предыдущем варианте у вас переменные уничтожаются после отработки функции
переменные объявляеются не
, а
PHP:
скопировать код в буфер обмена
  1. public $this->var;
28. Конструктор - 24 Августа, 2011 - 13:02:02 - перейти к сообщению
Подправил, все работает, но можно ли как то избавиться от $param ?
Например чтобы переменная $this->database_name сама присваивала себе значение
при $x = new db1('значение $this->database_name');
PHP:
скопировать код в буфер обмена
  1. class db1
  2. {
  3.         private $servername;
  4.         private $username;
  5.         private $password;
  6.         private $database_name;
  7.         function __construct($param)
  8.         {
  9.                 $this->servername = 'localhost';
  10.                 $this->username = 'root';
  11.                 $this->password = 'root';
  12.                 $this->database_name = $param;
  13.         }

(Добавление)
ладно с лишним параметром это не самое важное
В итоге я получил 2 класса:
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. class db1
  3. {
  4.         private $servername;
  5.         private $username;
  6.         private $password;
  7.         private $database_name;
  8.         function __construct($database_name)
  9.         {
  10.                 $this->servername = 'localhost';
  11.                 $this->username = 'root';
  12.                 $this->password = 'root';
  13.                 $this->database_name = $database_name;
  14.         }
  15.         /* *************************************
  16.          * Функция удаления базы данных.
  17.          * В функцию передается имя базы данных.
  18.          */
  19.         function delete_db()
  20.         {
  21.                 $con = mysql_connect( $this->servername , $this->username , $this->password );
  22.                         if (!$con)
  23.                         {
  24.                                 die( 'Could not connect: '.mysql_error() );
  25.                         }              
  26.                 /* Delete database */  
  27.                 if (mysql_select_db($this->database_name, $con))
  28.                 {
  29.                         mysql_query( "DROP DATABASE ".$this->database_name , $con );   
  30.                 }
  31.                         else
  32.                         {
  33.                                 return 0;              
  34.                         }
  35.         mysql_close($con);     
  36.         }
  37. }
  38. ?>

PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. require_once 'basa1.php';
  3. class db2 extends db1
  4. {
  5.         function __construct()
  6.         {
  7.                 parent::__construct($database_name);
  8.                 echo 'Это наследуемый класс <br />';
  9.         }
  10. }
  11. $y = new db2('data11');
  12. $y -> delete_db();
  13. ?>

_________
так вот в наследуемом классе не работает функция первого класса.
Может наследуемом классе что-то не так с конструктором?
(Добавление)
Так заработало, но правлильно это или нет не знаю..
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. require_once 'basa1.php';
  3. class db2 extends db1
  4. {   private $database_name;
  5.         function __construct($database_name)
  6.         {
  7.                 parent::__construct($database_name);
  8.                 echo 'Это наследуемый класс <br />';
  9.         }
  10. }
  11. $y = new db2('data11');
  12. $y -> delete_db();
  13. ?>
29. КЫР - 24 Августа, 2011 - 21:14:11 - перейти к сообщению
ты же ошибка с объявление переменной
30. White - 24 Августа, 2011 - 22:07:09 - перейти к сообщению
КЫР пишет:
private $this->database_name

откуда $this в объявлении переменных? Не понял

 

Powered by ExBB FM 1.0 RC1