[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Наследование классов
Renden
Доброго, наверно уже задолбал, но непонятно почему не работает и как заставить работать?

class News {
protected $newsName;
function last() {
$this->newsName = 'Я последняя новость';
}
}

class Mail extends News {
function send() {
echo $this->newsName;
}
}

$news = new News();
$news->last();

$mail = new Mail();
$mail->send(); //пусто, хотя по логике должно вывести 'Я последняя новость'




Спустя 5 минут, 54 секунды (27.10.2011 - 13:55) Winston написал(а):

 ! 

М
Дайте теме содержательное название, иначе закрою !
Winston

Спустя 7 минут, 8 секунд (27.10.2011 - 14:02) Семён написал(а):
Естественно, так и будет
Здесь у тебя будет т.к. была вызвана функция last(), которая и установит некое значение в переменную $newsName:
$news = new News();
$news->last();


Здесь у тебя, ничего не выходит, потомучто ты создал экземпляр класса Mail унаследовал News, но не вызвал фукнцию last()
$mail = new Mail();
$mail->send();


И да прочитай, что такое return в функциях.

Спустя 3 минуты, 6 секунд (27.10.2011 - 14:05) Семён написал(а):
В итоге твой класс быть должен быть таким:
class News {
protected $newsName;
public function last() {
$this->newsName = 'Я последняя новость';
return $this->newsName;
}
}

class Mail extends News {
function send() {
return $this->newsName;
}
}


$mail = new Mail();
$mail->last();
echo $mail->send();

Спустя 5 минут, 31 секунда (27.10.2011 - 14:11) Renden написал(а):
Семён
да это все понятно что я из класса наследника могу вызвать написав так:

$mail = new Mail();
$mail->last();
$mail->send();

Цитата
Здесь у тебя, ничего не выходит, потомучто ты создал экземпляр класса Mail унаследовал News, но не вызвал фукнцию last()

я вызвал её раньше, значения то она записала поидее, почему я немогу получить эти значения?

Спустя 1 минута, 5 секунд (27.10.2011 - 14:12) Семён написал(а):
Renden
Прочитай, что такое Статические методы и классы в PHP, это поможет тебе.

Спустя 2 минуты, 7 секунд (27.10.2011 - 14:14) Renden написал(а):
Семён
ок почитаю..

И еще вопрос я могу записать в класс наследник какое-то свойство которое сгенерировалось в классе родителе?
Пример:

class News {
public function last() {
$this->newsName = 'Я последняя новость';
return $this->newsName;
}
}

class Mail extends News {
protected $newsName;
function send() {
return $this->newsName;
}
}


Спустя 2 минуты, 17 секунд (27.10.2011 - 14:16) Семён написал(а):
Вот пример:
class News {
static protected $newsName;
public function last() {
self::$newsName = 'Я последняя новость';
return self::$newsName;
}
}

class Mail extends News {
function send() {
return self::$newsName;
}
}


News::last();
$mail = new Mail();
echo $mail->send();

Спустя 3 минуты, 34 секунды (27.10.2011 - 14:20) Семён написал(а):
Цитата
И еще вопрос я могу записать в класс наследник какое-то свойство которое сгенерировалось в классе родителе?

Да, смотри мой посл. пример. (читаем что такое static, читаем что такое private, public, protected))

Спустя 1 минута, 51 секунда (27.10.2011 - 14:22) caballero написал(а):
Цитата
я вызвал её раньше, значения то она записала поидее, почему я немогу получить эти значения?


ты ж разные екземпляры создал
найди книгу ООП для чайников и почитай что такое инкапсуляция

Спустя 1 минута, 31 секунда (27.10.2011 - 14:23) caballero написал(а):
Цитата
читаем что такое static, читаем что такое private, public, protected



Читаем что такое классы а что такое экземпляры (instance) классов
человек не может отличить одно од другого - зачем ему лезть дальше

Спустя 31 секунда (27.10.2011 - 14:24) m4a1fox написал(а):
Читаю книжку Зандстра, очень занимательно.... Я бы вам посоветовал тоже почитать! По тихоньку тоже начинаю осваивать ООП, и вот что думаю по вашему поводу! ИМХО конечно, не обессудьте. Так вот, а не проще ли объявить экземпляр класса в производном классе.... просто мысли....

Спустя 31 секунда (27.10.2011 - 14:24) Семён написал(а):
caballero
Согласен, но это замечание уже было сделано)

Спустя 2 минуты, 38 секунд (27.10.2011 - 14:27) m4a1fox написал(а):
А в производном так же можно вызвать констуктор, кот. будет принимать в виде параметра объект класса родителя. Таким образом, код вызова класса сократиться до одной строчки! не уверен...но все же!

Спустя 1 минута, 55 секунд (27.10.2011 - 14:29) Семён написал(а):
m4a1fox
Я тебя понял, это нужно реально не во всех ситуациях)))

Спустя 14 секунд (27.10.2011 - 14:29) Renden написал(а):
caballero
Когда я читаю "просто так" плохо запоминаю, другое дело когда ты пытаешься что-то сделать в своем проекте, и возникает проблема, когда ты её решаешь ты навсегда запоминаешь как это сделать.
Про ООП смотрел видеокурсы, но там в общих чертах только...
m4a1fox
проще не всегда лучше, но в данном примере было интересно узнать, а не "забить" и сделать так как проще smile.gif

Спустя 1 минута, 39 секунд (27.10.2011 - 14:31) Семён написал(а):
Вопросы есть ещё? )
или тема исчерпала себя?

Спустя 2 минуты, 3 секунды (27.10.2011 - 14:33) m4a1fox написал(а):
Не проще, тут я не правильно сказал! А альтернативнее....вот и все!

Спустя 2 минуты, 9 секунд (27.10.2011 - 14:35) Renden написал(а):
Семён
Пока вроде нет smile.gif

всем спс)

Спустя 32 минуты, 12 секунд (27.10.2011 - 15:07) caballero написал(а):
Цитата
Про ООП смотрел видеокурсы


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

Спустя 26 секунд (27.10.2011 - 15:07) bodja написал(а):
Цитата
Доброго, наверно уже задолбал, но непонятно почему не работает и как заставить работать?

Здесь все очень просто.
Вы создали 2 обьекта,имеющие 2 одинаковых class News,но это независимые друг от друга обьекты,просто с одинаковым кодом. smile.gif
прочитатйте предыдущий топик,я этот вопрос рассматривал.

Спустя 54 секунды (27.10.2011 - 15:08) Семён написал(а):
Закрыл тему, чтобы некрофилы не выползали smile.gif

Спустя 1 минута, 55 секунд (27.10.2011 - 15:10) Winston написал(а):
caballero
Цитата (caballero @ 27.10.2011 - 15:07)
Учебники нормальные нужно читать

Хотел бы узнать ваше мнение. Какие книги по ООП посоветуете ? smile.gif
Цитата (Семён @ 27.10.2011 - 15:08)
Закрыл тему

Как быстро. smile.gif
Админ придет и откроет smile.gif

Спустя 4 дня, 18 часов, 2 минуты, 48 секунд (1.11.2011 - 09:13) linker написал(а):
Тему открыл. Раз за разом возникают подобные темы, а все от того, что не понимают, что объекты (экземпляры) не являются родственными друг-другу, объекты не наследуются друг от друга. Наследование происходит на уровне классов, когда ещё об объектах не идёт никакой речи.

Спустя 1 час, 42 минуты, 31 секунда (1.11.2011 - 10:56) caballero написал(а):
Цитата
Раз за разом возникают подобные темы 

А это потому что по видеокурсах учатся программировать вместо почитать документацию и сделать десяток примеров

Спустя 3 минуты, 46 секунд (1.11.2011 - 10:59) Семён написал(а):
Повыползали laugh.gif
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.