Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Разное

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: Зачем нужны классы?

Сообщения:  [1-10]    [11-20]  [21-27] 

 
 автор: darkozoid   (11.06.2013 в 08:53)   письмо автору
 
   для: cheops   (10.06.2013 в 21:29)
 

окей
http://www.softtime.ru/forum/read.php?id_forum=2&id_theme=89689&page=1

  Ответить  
 
 автор: cheops   (10.06.2013 в 21:29)   письмо автору
 
   для: darkozoid   (10.06.2013 в 09:19)
 

Под новые вопросы лучше заводить новые темы - и ответов будет больше и искать потом вам и другим посетителям будет проще.

  Ответить  
 
 автор: darkozoid   (10.06.2013 в 09:19)   письмо автору
 
   для: Гость   (07.06.2013 в 19:03)
 


<?
class a
public 
$ar
  function 
__construct(){ 
    
$this->ar='что то очень важное и часто нужное'
  } 
  function 
sd(){ 
    print 
$this->ar.".....A::sd<br>"
  }  

class 
extends a
  function 
name($str){ 
    
$this->ar=$str
        print 
$this->ar;
  } 

class 
nn extends a
  function 
name(){ 
    print 
$this->ar
  } 


$obj1=new a;
$obj1->sd(); // $ar = что то очень важное и часто нужное
$obj2=new n;
$obj2->name("что то другое<br>"); // $ar = что то другое
$obj3=new nn;
$obj3->name(); // $ar = что то очень важное и часто нужное
?>


Хм... действительно значение осталось исходным...

тогда возникает вопрос, а как же ее (переменную) можно поменять, так, чтобы она наследовалась с новым значением?

и второй вопрос:
Почему
$obj3=new nn;
$obj3->name(); // $ar = что то очень важное и часто нужное

работает, а

nn::name(); 

нет?

  Ответить  
 
 автор: Гость   (07.06.2013 в 19:03)   письмо автору
 
   для: darkozoid   (07.06.2013 в 17:40)
 

Наследование работает не так как вы думаете. Попробуйте сами свой пример на практике.

  Ответить  
 
 автор: darkozoid   (07.06.2013 в 17:41)   письмо автору
 
   для: Гость   (07.06.2013 в 17:10)
 

Голова моя лопнет )))
спасибо за совет, дельная книга - это хорошо

  Ответить  
 
 автор: darkozoid   (07.06.2013 в 17:40)   письмо автору
 
   для: Sfinks   (07.06.2013 в 16:57)
 

окей, но если все так наследуется, то можно случайно присвоить значение переменной всего класса...

class a{
public $var;
  function __construct(){
    $this->var='что то очень важное и часто нужное';
  }
  function sd(){
    .....
  }
...
}
class b extends a{
....
}
// потом еще куча кода в котором так сразу и не найти $var 
class n extends a{
  function name($str){
    $this->var=$str;
  }
....
}
class nn extends a{
  function name(){
    print $this->var;
  }
....
}


a::sd; // $var = то что нужно
n::name; // $var = что то новое
nn::r; // $var уже совсем не то что надо


вот если как то так сделать, то переменная var будет перезаписана, и при дальнейшем наследовании ее значение будет уже не тем что нужно... как этого избежать можно?
или я опять не прав где то?

  Ответить  
 
 автор: Гость   (07.06.2013 в 17:10)   письмо автору
 
   для: darkozoid   (07.06.2013 в 15:27)
 

Тебе нужно сперва подтянуть теорию. По поводу разработки класса для работы с бд могу привести очень хороший пример (сам более-менее начал разбираться и понимать ООП после знакомства с книгой). Как обычно рекомендую книжку :) (ну ведь если помогло мне, значит может помочь и вам). "Профессиональное программирование на PHP", автор Джордж Шлосснейгл. Там на первых ста страницах много полезной теории, а главное как пример создается класс для работы с БД, причем все очень хорошо объяснятся - что и зачем делается и как это помогает в работе с кодом в дальнейшем. Книжку найти можно на рутрекере (я счас без проблем загуглил)

  Ответить  
 
 автор: Sfinks   (07.06.2013 в 16:57)   письмо автору
 
   для: darkozoid   (07.06.2013 в 15:27)
 

Это называется наследование. Я не мастер теории, поэтому могу только посоветовать читать....

  Ответить  
 
 автор: darkozoid   (07.06.2013 в 15:27)   письмо автору
 
   для: Sfinks   (07.06.2013 в 13:45)
 


<?php 
  
class db_config extends mysqli
    public function 
__construct(){ 
      require_once(
'config.php'); 
      
parent::__construct(_HOST__USER__PASS__DBNAME_); 
    } 
  } 
  class 
db extends db_config
    public function 
select($sql){  
      return 
$this->query($sql); 
    } 
  } 
  
$db = new db(); 
  
$db->select('......');

  return $this->query($sql); 

query($sql) это же не в этом классе, а в родительском? почему $this ???

  Ответить  
 
 автор: Sfinks   (07.06.2013 в 13:45)   письмо автору
 
   для: darkozoid   (07.06.2013 в 13:11)
 

> ну а если так
$obj=new main; $db::select($sql);
>то конструктор будет запущен? или мне надо обратится к какому то методу в этом классе
>(или к самому конструктору)???


Создавать нужно не предка, а потомка.
Если вы выполните:
$obj=new db();
$obj->select($sql);
то в таком виде, как у вас написано выше, все выполнится. Но только потому, что в классе db метор __construct() не переопределен. Поэтому будет вызван метод предка.
делать так, как я писал выше, то должно быть примерно так.
<?php
  
class db_config extends mysqli{
    public function 
__construct(){
      require_once(
'config.php');
      
parent::__construct(_HOST__USER__PASS__DBNAME_);
    }
  }
  class 
db extends db_config{
    public function 
select($sql){ 
      return 
$this->query($sql);
    }
  }
  
$db = new db();
  
$db->select('......');
Пишу в браузере, возможны опечатки =)
И это все без использования паттерна синглетон. С ним будет еще немного по другому.

>а var $i уже не работает? или просто устарело?
Я не помню работает или не работает, но в любом случае - это не "просто устарело". Все что устарело, рано или поздно удалят. Поэтому лучше этим не пользоваться.

  Ответить  

Сообщения:  [1-10]    [11-20]  [21-27] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования