PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи

Страниц (9): « 1 2 3 [4] 5 6 7 8 9 »

> Найдено сообщений: 128
Конструктор Отправлено: 25 Августа, 2011 - 14:19:47 • Тема: Помогите разобраться с private и __constructor • Форум: Объектно-ориентированное программирование

Ответов: 26
Просмотров: 6701
EuGen пишет:
Переменные создадутся, но они будут относиться к классу-наследнику и не будут иметь ничего общего с классом-предком.
То есть вызывая parent::__construct() Вы создадите свойства в контексте текущего объекта. Родительские Вы не затронете.

Если я правильно Всех понял то:
1. Создаются новые переменные подключения .
2. Эти новые переменные все таки получают значения приватных переменных родителя.
3. Но при этом ЭТИ ЗНАЧЕНИЯ СТАНОВЯТСЯ PUBLIC ((( А?!
Конструктор Отправлено: 25 Августа, 2011 - 14:14:22 • Тема: Помогите разобраться с private и __constructor • Форум: Объектно-ориентированное программирование

Ответов: 26
Просмотров: 6701
iflight пишет:
новые переменные класса наследника

с какими значениями?

тоесть все таки переменные наследуются?

Пусть это уже новые переменные, но они с теме же именами и значениями??

этот конструктор и сбиватет меня с толку..
работает он в наследнике или нет?
PHP:
скопировать код в буфер обмена
  1. function __construct()
  2.         {
  3.                 $this->servername = 'localhost';
  4.                 $this->username = 'root';
  5.                 $this->password = 'root';
  6.         }
Конструктор Отправлено: 25 Августа, 2011 - 14:10:02 • Тема: Помогите разобраться с private и __constructor • Форум: Объектно-ориентированное программирование

Ответов: 26
Просмотров: 6701
iflight пишет:
ы же в наследнике их и присваевете

Присваивание это когда есть переменная и есть значение которое ей присваивается.
А во втором классе что присваивается этим свойствам ? >>( $this->servername , $this->username , $this->password );
ведь в этом классе нет нужных значений..
Дело в том что я писал это подключение не зная что privat родителя не наследуестя
и хотел что все данны шли от родителя.. а теперь не пойму как все таки это подключение к базе данных происходит..
Может тут браузер виноват? кеш какой нибудь.. не знаю как это назвать..
Конструктор Отправлено: 25 Августа, 2011 - 14:03:41 • Тема: Помогите разобраться с private и __constructor • Форум: Объектно-ориентированное программирование

Ответов: 26
Просмотров: 6701
EuGen пишет:
БД тут ни при чем.
Ваш класс-потомок создает свои свойства - они не имеют ничего общего со свойствами родительского класса (они попросту не видны потомку)

Тогда как происходит подключение если наследник не знает данных подключения?
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. require_once 'basa1.php';
  3. class db2 extends db1
  4. {
  5. .............
  6. $con = mysql_connect( $this->servername , $this->username , $this->password ); // ??????
  7. ..........
  8.  
Конструктор Отправлено: 25 Августа, 2011 - 13:56:05 • Тема: Помогите разобраться с private и __constructor • Форум: Объектно-ориентированное программирование

Ответов: 26
Просмотров: 6701
EuGen пишет:
..

Тоесть у меня проблема с базой данных? (тестирую на веб-сервере XAMP)
И она дает уделить таблицу из базы с нулевыми паролем и юзером?
Ведь как то класс-наследник всеже удаляет таблицы..
(ps. пишу проект для крупной банковской системы, поэтому безопасность очень актуальна )) Ниндзя )
Конструктор Отправлено: 25 Августа, 2011 - 13:36:40 • Тема: Помогите разобраться с private и __constructor • Форум: Объектно-ориентированное программирование

Ответов: 26
Просмотров: 6701
Я написал 2 класса. Класс db2 наследуется из класса db1 :
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. class db1
  3. {
  4.         private $servername;
  5.         private $username;
  6.         private $password;
  7.         private $database_name;
  8.         function __construct()
  9.         {
  10.                 $this->servername = 'localhost';
  11.                 $this->username = 'root';
  12.                 $this->password = 'root';
  13.         }
  14. /* *****************************************
  15.          * Функция удаления базы данных.
  16.          * В функцию передается имя базы данных.
  17.          */
  18.         function delete_db($database_name)
  19.         {
  20.                 $this->database_name = $database_name;
  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.                         $sql = "DROP DATABASE ".$this->database_name;
  30.                         mysql_query( $sql , $con );    
  31.                 }
  32.                         else
  33.                         {
  34.                                 return 0;              
  35.                         }
  36.         mysql_close($con);     
  37.         }
  38. /* *****************************************/  
  39. }
  40. ?>

PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. require_once 'basa1.php';
  3. class db2 extends db1
  4. {
  5.         private $table_name;
  6.         function __construct()
  7.         {
  8.                 parent::__construct();
  9.                 echo 'Это наследуемый класс <br />';
  10.         }
  11.        
  12. /* ****************************************
  13.          * Функция удаления таблицы из базы данных.
  14.          * В функцию передается имя базы данных и таблицы.
  15.          */
  16.         function delete_table($database_name , $table_name)
  17.         {
  18.                 $this->database_name = $database_name;
  19.                 $this->table_name = $table_name;
  20.                 $con = mysql_connect( $this->servername , $this->username , $this->password );
  21.                         if (!$con)
  22.                         {
  23.                                 die( 'Could not connect: '.mysql_error() );
  24.                         }              
  25.                 /* Delete table */     
  26.                 if (mysql_select_db(($this->database_name), $con))
  27.                 {
  28.                         $sql = "DROP TABLE ".$this->table_name;
  29.                         mysql_query( $sql , $con );    
  30.                 }
  31.                         else
  32.                         {
  33.                                 echo 'База не выбрана';
  34.                                 return 0;              
  35.                         }
  36.         mysql_close($con);     
  37.         }      
  38. /**************************************/
  39. }
  40.  
  41. $x = new db2();
  42. $x -> delete_table( 'test' , 'test1' );
  43. ?>

*****
Вопрос: каким образом работает 2й класс если он использует свойства родителя?? Ведь у родителя все свойства Privat !!
private $servername;
private $username;
private $password;
Конструктор Отправлено: 24 Августа, 2011 - 13:02:02 • Тема: Ошибка в простом классе с 1ой функцией • Форум: Объектно-ориентированное программирование

Ответов: 29
Просмотров: 8491
Подправил, все работает, но можно ли как то избавиться от $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. ?>
Конструктор Отправлено: 24 Августа, 2011 - 12:55:58 • Тема: Ошибка в простом классе с 1ой функцией • Форум: Объектно-ориентированное программирование

Ответов: 29
Просмотров: 8491
DeepVarvar пишет:
Сначала переменные надо объявить

получается в предыдущем варианте у меня все по умолчанию pablic стало?
Конструктор Отправлено: 24 Августа, 2011 - 12:30:25 • Тема: Ошибка в простом классе с 1ой функцией • Форум: Объектно-ориентированное программирование

Ответов: 29
Просмотров: 8491
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 или нет?
Конструктор Отправлено: 23 Августа, 2011 - 21:46:24 • Тема: Ошибка в простом классе с 1ой функцией • Форум: Объектно-ориентированное программирование

Ответов: 29
Просмотров: 8491
короче вот что у меня получилось, и при этом оно работает:

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
Конструктор Отправлено: 23 Августа, 2011 - 19:38:35 • Тема: Ошибка в простом классе с 1ой функцией • Форум: Объектно-ориентированное программирование

Ответов: 29
Просмотров: 8491
DeertOff пишет:
скобка есть но ругается сам эклипс
и Php тоже
CODE (htmlphp):
скопировать код в буфер обмена
  1. Parse error: syntax error, unexpected T_PRIVATE in C:\xampp\htdocs\test.loc\www\basa1.php on line 5
Конструктор Отправлено: 23 Августа, 2011 - 19:32:59 • Тема: Ошибка в простом классе с 1ой функцией • Форум: Объектно-ориентированное программирование

Ответов: 29
Просмотров: 8491
А почему 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'
Конструктор Отправлено: 23 Августа, 2011 - 19:18:41 • Тема: Ошибка в простом классе с 1ой функцией • Форум: Объектно-ориентированное программирование

Ответов: 29
Просмотров: 8491
Немного запутался с функцией.
А в чем разница обращения к финкции из класса,
или если в случае обращения вне класса?
У меня все вызовы функций будут внешними, но хотелось бы и разницу понять
Конструктор Отправлено: 23 Августа, 2011 - 19:06:12 • Тема: Ошибка в простом классе с 1ой функцией • Форум: Объектно-ориентированное программирование

Ответов: 29
Просмотров: 8491
LIME пишет:
передавайте значение в операторе new

Дело еще в том что я в этот класс хотел засунуть больше функций..
И у каждой функции могут быть свои переменные.
Получается все переменные для всех функций надо будет присваивать в конструкторе?
А более универсального метода нет? А то количество передаваемых переменных
может быть довольно большим.. и наверно нерационально
для вызова одной функции передавать лишние переменные..
Конструктор Отправлено: 23 Августа, 2011 - 18:51:27 • Тема: Ошибка в простом классе с 1ой функцией • Форум: Объектно-ориентированное программирование

Ответов: 29
Просмотров: 8491
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. ?>

тоесть так нужно конструктор обьявить?

Страниц (9): « 1 2 3 [4] 5 6 7 8 9 »
Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB