|
|
|
|
|
для: cheops
(10.06.2013 в 21:29)
| | окей
http://www.softtime.ru/forum/read.php?id_forum=2&id_theme=89689&page=1 | |
|
|
|
|
|
|
|
для: 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 n 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 = что то очень важное и часто нужное
|
работает, а
нет? | |
|
|
|
|
|
|
|
для: darkozoid
(07.06.2013 в 17:40)
| | Наследование работает не так как вы думаете. Попробуйте сами свой пример на практике. | |
|
|
|
|
|
|
|
для: Гость
(07.06.2013 в 17:10)
| | Голова моя лопнет )))
спасибо за совет, дельная книга - это хорошо | |
|
|
|
|
|
|
|
для: 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 будет перезаписана, и при дальнейшем наследовании ее значение будет уже не тем что нужно... как этого избежать можно?
или я опять не прав где то? | |
|
|
|
|
|
|
|
для: darkozoid
(07.06.2013 в 15:27)
| | Тебе нужно сперва подтянуть теорию. По поводу разработки класса для работы с бд могу привести очень хороший пример (сам более-менее начал разбираться и понимать ООП после знакомства с книгой). Как обычно рекомендую книжку :) (ну ведь если помогло мне, значит может помочь и вам). "Профессиональное программирование на PHP", автор Джордж Шлосснейгл. Там на первых ста страницах много полезной теории, а главное как пример создается класс для работы с БД, причем все очень хорошо объяснятся - что и зачем делается и как это помогает в работе с кодом в дальнейшем. Книжку найти можно на рутрекере (я счас без проблем загуглил) | |
|
|
|
|
|
|
|
для: 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 ??? | |
|
|
|
|
|
|
|
для: 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 уже не работает? или просто устарело?
Я не помню работает или не работает, но в любом случае - это не "просто устарело". Все что устарело, рано или поздно удалят. Поэтому лучше этим не пользоваться. | |
|
|
|
|