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

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

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

а вобще конструктор нужен всегда в классах?
7. DeepVarvar - 23 Августа, 2011 - 18:44:32 - перейти к сообщению
Не всегда
8. Конструктор - 23 Августа, 2011 - 18:45:45 - перейти к сообщению
DeepVarvar пишет:
Сначала описание - потом вызов.

а разве в php это обязательно?
например если без класса
то можно вызывать функции которая описана ниже..
9. LIME - 23 Августа, 2011 - 18:47:04 - перейти к сообщению
Конструктор можно отдельный метод (сеттер) написать который будет устанавливать
просто проще сразу в конструкторе
10. DeepVarvar - 23 Августа, 2011 - 18:48:21 - перейти к сообщению
Конструктор пишет:
то можно
Точно, сначала вывод - потом отправка заголовков...

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

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

вот так ошибки не будет
13. LIME - 23 Августа, 2011 - 18:59:07 - перейти к сообщению
PHP:
скопировать код в буфер обмена
  1. function __construct($var) {
  2. $this->database_name=$var;
  3.   }

а остальное верните обратно и передавайте значение в операторе new
PHP:
скопировать код в буфер обмена
  1. $x = new db1('data');

и радибога описание перенесите в начало
(Добавление)
DeertOff да...так даже правильнее с той точки зрения что можно применять к разным базам после создания объекта
(Добавление)
более того свойство $database_name вообще лишнее
можно оперировать внутри метода просто с передаваемым значением ))
mysql_query( "DROP DATABASE ".$var , $con );
14. Конструктор - 23 Августа, 2011 - 19:06:12 - перейти к сообщению
LIME пишет:
передавайте значение в операторе new

Дело еще в том что я в этот класс хотел засунуть больше функций..
И у каждой функции могут быть свои переменные.
Получается все переменные для всех функций надо будет присваивать в конструкторе?
А более универсального метода нет? А то количество передаваемых переменных
может быть довольно большим.. и наверно нерационально
для вызова одной функции передавать лишние переменные..
15. LIME - 23 Августа, 2011 - 19:08:19 - перейти к сообщению
LIME пишет:
можно оперировать внутри метода просто с передаваемым значением ))

 

Powered by ExBB FM 1.0 RC1