[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Наследование методов класса.
Gesandte
Добрый вечер.

Задача следующая.

Есть 2 файла, в одном класс А, в другом В.
В классе В содержится функция С. (B->С)
В классе А содержится 2 функции D и E.

Нужно подгрузить и создать экземпляр класса С в функции D, а потом работать с методами класса С в функции Е, через метод D.

Жуть какая то вышло, но надеюсь понятно, я просто уже незнаю как реализовать такую связку. Заранее спасибо за помощь)



Спустя 4 минуты (5.11.2011 - 23:55) Игорь_Vasinsky написал(а):
оОоо всех трёх китов за раз зацепил biggrin.gif

может код подкинишь?

Спустя 4 минуты, 35 секунд (5.11.2011 - 23:59) Gesandte написал(а):
class modules {
public function elements() {
$path = $_SERVER['DOCUMENT_ROOT']."modules/default/";

require_once $path."language.php";
$language = new language;
}

public function title() {
$this->elements->language->select('russian')->text['server']; # это неработающее извращение, но так по крайней мере понятно что требуется =))
}

public function content() {
phpinfo(); # при необходимости в этой функции мы так же должны иметь возможность использовать данный из класса language

}
}


?>

Спустя 1 минута, 12 секунд (6.11.2011 - 00:01) Игорь_Vasinsky написал(а):
Есть 2 файла, в одном класс А, в другом В.
В классе В содержится функция С. (B->С)
В классе А содержится 2 функции D и E.


я задумался....

Спустя 56 секунд (6.11.2011 - 00:02) Gesandte написал(а):
понимаю что написал хрень))) все давно забыто и до ооп толком не дошел)

Спустя 3 минуты, 45 секунд (6.11.2011 - 00:05) m4a1fox написал(а):
Я думаю Игорь удивился откуда D и E появились!

Спустя 45 секунд (6.11.2011 - 00:06) Игорь_Vasinsky написал(а):
m4a1fox в яблочко wink.gif

- Т.е. ты говориш о вполне реальных классах с методами? а зачем рисуешь абстракции?

Спустя 4 минуты, 3 секунды (6.11.2011 - 00:10) SerginhoLD написал(а):
Есть 2 файла, в одном класс А, в другом В.
В классе В содержится функция С. (B->С)
В классе А содержится 2 функции D и E.

Нужно подгрузить и создать экземпляр класса С в функции D, а потом работать с методами класса С в функции Е, через метод D.

Что за чушь во втором абзаце?
В начале написано, что `C` это функция в классе `B`, а потом откуда не возьмись, создать экземпляр класса `C`
:blink:
Ты уж определись :)

Спустя 4 минуты, 10 секунд (6.11.2011 - 00:14) Gesandte написал(а):
а хрен его знает)
кусок кода выложил, там понятнее должны быть....а то А, B, C, D, E..... =D сам могу запутаться)

Спустя 2 минуты, 16 секунд (6.11.2011 - 00:17) Gesandte написал(а):
Цитата (Игорь_Vasinsky @ 5.11.2011 - 21:06)
m4a1fox в яблочко wink.gif

- Т.е. ты говориш о вполне реальных классах с методами? а зачем рисуешь абстракции?

вначале думал так проще будет)

Спустя 4 минуты, 4 секунды (6.11.2011 - 00:21) m4a1fox написал(а):
Gesandte
Цитата
функции D

Простите за придирчивость - но метод, так правильно!

Спустя 1 минута, 55 секунд (6.11.2011 - 00:23) Игорь_Vasinsky написал(а):
m4a1fox
выложи ему тот кусок кода (полиморфизм + инкапсуляция)

Спустя 5 минут, 15 секунд (6.11.2011 - 00:28) SerginhoLD написал(а):
Вот короче, что-то типа того, дальше уже говори что хочешь))

index.php
classes/modules.php
classes/language.php

//index.php
require_once 'classes/modules.php';

$mod = new modules;

echo $mod->text();

//modules.php

require_once 'language.php';

class modules
{
function elem()
{
return new language;
}

function text()
{
return $this->elem()->text();
}
}

//language.php
class language
{
function text()
{
return 'text';
}
}

Спустя 2 минуты, 15 секунд (6.11.2011 - 00:30) m4a1fox написал(а):
Игорь_Vasinsky
Цитата
выложи ему тот кусок кода (полиморфизм + инкапсуляция)

А есть смысл?

Gesandte
Давай скрипты сюда, будем делать смотреть!

Спустя 1 минута, 17 секунд (6.11.2011 - 00:31) m4a1fox написал(а):
SerginhoLD
Эка хитро закрутил! Сходу и не понять!

Спустя 9 минут, 56 секунд (6.11.2011 - 00:41) Gesandte написал(а):
хм, а с return так выглядит ничего) но сходу не заработало, буду завтра разбираться тогда)))

Спустя 2 минуты, 51 секунда (6.11.2011 - 00:44) Gesandte написал(а):
хотя возможно вру)))) вроде прогресс есть) только файл не инклудиться чего то)
SerginhoLD спасибо за идею)

Спустя 3 минуты, 16 секунд (6.11.2011 - 00:47) SerginhoLD написал(а):
Цитата (Gesandte @ 5.11.2011 - 21:44)
спасибо за идею)

это не идея, это смысл ООП, классы отдельно друг от друга, это кучка функций в мусорном баке wink.gif

Спустя 7 минут, 10 секунд (6.11.2011 - 00:55) caballero написал(а):
Цитата
хм, а с return так выглядит ничего) но сходу не заработало, буду завтра разбираться тогда)))


в смысле ничего хорошего?

включать require_once внутрь методов класса - признак дурного тона

автолоад для кого придумали? Для Пушкина?

Спустя 4 минуты, 56 секунд (6.11.2011 - 00:59) SerginhoLD написал(а):
caballero
чеж ты всегда к каждому слову придираешься, ну показали ему пример, а там как ему нравиться, так пусть и делать: __autoload, инклуд над названием класса, инклуд в методе, это можно сказать почерк, но то что __autoload самое правильное, это да, согласен smile.gif

Спустя 4 минуты, 19 секунд (6.11.2011 - 01:04) caballero написал(а):
Цитата
ну показали ему пример, а там как ему нравиться, так пусть и делать


именно так он и будет делать - в всех надцати местах где надо создать экземпляр класса будет втыкать require_once

автолоад для примера конешно лишнее
просто перенеси все require вверх и все дела


Спустя 12 часов, 56 минут, 38 секунд (6.11.2011 - 14:00) Gesandte написал(а):
до автолоада еще дойдем))) надеюсь)
пока возник еще один небольшой глупый вопрос


<?php

class
A {
public $one = array();

public function B() {
$this->one['d'] = "aaa!";
$this->one['e'] = "eee!";
}
}


$A = new A;
$A->B()->one['e'];

?>


Так конечно же не работает....) и незнаю как заставить..

В результате родилась такая идея :lol:


<?php

class
language {
private $available = array();
private $language = array();

private function english($text) {
switch ($text) {
case 'a': $lang = "one"; break;
case 'e': $lang = "two"; break;
}

return $lang;
}

private function russian($text) {
switch ($text) {
case 'a': $lang = "one_rus"; break;
case 'e': $lang = "two_rus"; break;
}

return $lang;
}

public function select($select, $text) {
$this->available = array('english', 'russian');

foreach ($this->available as $one) {
if ($select === $one) {
$this->language['check'] = true;
break;
} else {
$this->language['check'] = false;
}
}


if ($this->language['check'] == true) {
return $this->$select($text);
} else {
return $this->english($text);
}
}
}


$language = new language;
echo $language->select('russian', 'e');

?>


Что скажете?

Спустя 14 минут, 48 секунд (6.11.2011 - 14:15) caballero написал(а):
Цитата
В результате родилась такая идея

Идея чего?


Цитата
Что скажете?

так поделись с аудиторией что ты сделать хочешь. Ну видим красиво отформатированный кусок кода. И что?

например не понятно в чем высший смысл каждый раз выбирать язык
а не выбрать язык а потом вызывать функции для слов
что тут в таком случае класс вообще делает (кроме понтов "я юзаю ООП")

так как ты написал можно обойтись одной обычной функцией и кода будет в три раза меньше



Спустя 49 минут, 20 секунд (6.11.2011 - 15:05) Renden написал(а):
Gesandte
Фореч помоему лишний, можно наврно так же:

public function select($select, $text) {
$this->available = array('english', 'russian');

if(in_array($select, $this->available))
return $this->$select($text);
else
return
$this->english($text);
}

ЗЫ поставь пожалуйста "заменять табуляцию пробелами" в своем редакторе...

Спустя 1 час, 23 минуты, 37 секунд (6.11.2011 - 16:28) Gesandte написал(а):
caballero, согласен что лучше вначале выбрать язык....пока получается так, только оно нихрена не работает......


<?php

class
content {
public $a = array();

function lang() {
$this->a['1'] = "o_O";
}

public function title() {
echo $this->lang()->a['1']; # как здесь вывести значение a['1'] ?
}
}


$content = new content;
$content->title();

?>


Notice: Trying to get property of non-object in ........

Renden, спасибо что поправил)

Спустя 4 минуты, 34 секунды (6.11.2011 - 16:33) sharki написал(а):

............
function lang() {
$this->a['1'] = "o_O";
return $this;
}

Спустя 45 минут, 32 секунды (6.11.2011 - 17:18) Gesandte написал(а):
блин.....так все просто, а голову ломаю полдня сижу biggrin.gif спасибо)
Быстрый ответ:

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