ООП первые шаги и тупик. Добавление в класс доп. функций

PN
На сайте с 01.05.2008
Offline
113
1055

Здравствуйте. Я только начал С ООП и еще не въехал, да и еще и путаюсь.

У меня есть папка с модулями.. и их уже много, кода на сайте много, и хочется его перевести на ООП, а я им никогда не пользоватлся (кроме сторонных кодов конечно).

Нужно что бы мой класс читал файлы, и дополнял основной класс функциями из этой папки, так что бы я их вызывал из этого класса.

class Class_modules {

var $path = 'modules'; //путь к модулям

var $ext_module = '_module.php'; // внутри подпапок прочитать файлы с окончанием

function auto_load_modules($path) {

#во первых как передать сюда переменую var $path которую задал выше? Через global?

} //function auto_load_modules($path) {

} //class class_modules {

$CLASS_MODULES = new Class_modules;

Далее нужно следующе..

Чититать файлы внутри '/modules/{имя папки}/файл_module.php'

И в этих файлах нужен код, который бы дополнял класс Class_modules новыми функциями.

Т.е. например что бы в Class_modules автоматом дополнились функции модулей (например модуль голосвания).

$CLASS_MODULES->func1();

$CLASS_MODULES->func2();

и т.п. Сами функции из модулей будут вызываться позднеее...

п.с.

И еще, по поводу авточтения есть уже примеры, http://php.net/manual/en/language.oop5.autoload.php

set_include_path(get_include_path().PATH_SEPARATOR.'/lib/');
spl_autoload_extensions('.library.php');
spl_autoload($class);

Но для меня это пока дремучий лес. Лучше все по порядку. Помогите пожалуйста.

S5
На сайте с 04.01.2010
Offline
77
#1
Prosto_niki:

Нужно что бы мой класс читал файлы, и дополнял основной класс функциями из этой папки, так что бы я их вызывал из этого класса.

class Class_modules {

var $path = 'modules'; //путь к модулям
var $ext_module = '_module.php'; // внутри подпапок прочитать файлы с окончанием

function auto_load_modules($path) {
#во первых как передать сюда переменую var $path которую задал выше? Через global?
вы её уже передали, просто работайте с ней внутри метода как и обычно
$path = ...;
} //function auto_load_modules($path) {



} //class class_modules {






$CLASS_MODULES = new Class_modules;

Далее нужно следующе..

Читать файлы внутри '/modules/{имя папки}/файл_module.php'
скандир, далее поиск в каждой найденной директории файла вида файл_module.php

И в этих файлах нужен код, который бы дополнял класс Class_modules новыми функциями.
синглтон вам в помощь, будет отдавать нужный экземпляр класса, с которым вы и будете работать

Т.е. например что бы в Class_modules автоматом дополнились функции модулей (например модуль голосвания).

$CLASS_MODULES->func1();
$CLASS_MODULES->func2();
множественное наследование в пхп насколько я помню не поддерживается, по-этому
синглтон вам в помощь, будет отдавать нужный экземпляр класса, с которым вы и будете работать

и т.п. Сами функции из модулей будут вызываться позднеее...


Но для меня это пока дремучий лес. Лучше все по порядку. Помогите пожалуйста.

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

//десятьбукоф

Ezekiel
На сайте с 11.08.2010
Offline
28
#2


class SomeModule {
private $path = '/path/to/module';

public function somefunc($var) {
retutn $this->path . $var;
}
}

внутри класса не используй var - это php4, используй public, protected, private - это php5.

переменные внутри класса называются свойствами. в моем примере $path - это свойство. обращаться к свойствам класса можно через $this, т.е. так: $this->path.

чтобы, добавить новые функции, если я тебя правильно понял, нужно использовать наследование.

например мой класс SomeModule имеет публичную (доступную из вне) ф-цию somefunc и приватное (доступное только внутри класса) свойство $path. используя наследование мы можем сделать так:

class NewModule extends SomeModule {


public function test() {
return true;
}

}

теперь класс NewModule имеет публичную ф-цию somefunc, приватное свойство $path и публичную ф-цию test

это в двух словах.

а вобще читай мануал - там есть все.

Обмен WebMoney (http://bit.ly/kqBOlV) Продам инвайт на Хабр (http://www.plati.ru/asp/pay.asp?idd=1529255)
PN
На сайте с 01.05.2008
Offline
113
#3

"NewModule имеет публичную ф-цию somefunc"

Но мне нужно наоборот. Что бы внутрь SomeModule вставить доп. функцию, так можно?

Типа добавить

public function somefunc22($var) {

retutn $this->path . $var;

}

Которая вставится позже в коде...

И в результате я получил

class SomeModule {

private $path = '/path/to/module';

public function somefunc($var) {

retutn $this->path . $var;

}

public function somefunc22($var) {

retutn $this->path . $var;

}

}

RO
На сайте с 13.07.2009
Offline
88
#4
Но мне нужно наоборот. Что бы внутрь SomeModule вставить доп. функцию, так можно?

в родителя нельзя «вставить» новый метод, можно лишь через дочерний класс унаследовать родительские свойства и методы, а затем расширить, что собственно и посоветовали выше. и вообще, автор, сначала упорно читают мануал, а потом берутся за код, а не наоборот. ооп/классы нужно использовать там где ты чувствуешь что будет правильней, а не просто от фонаря.

LEOnidUKG
На сайте с 25.11.2006
Offline
1774
#5
ооп/классы нужно использовать там где ты чувствуешь что будет правильней, а не просто от фонаря.

И только там, когда делается или сторонний класс в 1 файле или же система на которой работают много людей. В противном случаи, обычных функций больше, чем достаточно.

✅ Мой Телеграм канал по SEO, оптимизации сайтов и серверов: https://t.me/leonidukgLIVE ✅ Качественное и рабочее размещение SEO статей СНГ и Бурж: https://getmanylinks.ru/ ✅ Настройка и оптимизация серверов https://getmanyspeed.ru/
IL
На сайте с 20.04.2007
Offline
435
#6
RedOK:
в родителя нельзя «вставить» новый метод, можно лишь через дочерний класс унаследовать родительские свойства и методы

Вообще, "добавить" метод к уже существующему классу возможно.. если воспользоваться "магическим" __call, однако, перед этим не мешало бы освоить немагические :)

Prosto_niki, удачи в освоении :)

... :) Облачные серверы от RegRu - промокод 3F85-3D10-806D-7224 ( http://levik.info/regru )
_vb_
На сайте с 25.07.2009
Offline
104
#7
LEOnidUKG:
И только там, когда делается или сторонний класс в 1 файле или же система на которой работают много людей. В противном случаи, обычных функций больше, чем достаточно.

"Не всегда" (С)

Мне, например, запись

stone.roll()

милее глазу, чем

roll(stone)

PS :)

Саратовская фракция серча (). Давайте посчитаемся.
LEOnidUKG
На сайте с 25.11.2006
Offline
1774
#8
милее глазу,

А мне лично нет :)

Поэтому глазки у всех разные :)

Не надо делать ООП, где он вообще не нужен. Это тоже самое, что кувалдой забивать вертикально маленький гвоздик. Забить можно, но трудозатрат больше.

---------- Добавлено 26.06.2012 в 20:35 ----------

ps. вообще удаляюсь, а то сейчас начнётся сразу, что лучше :)

PN
На сайте с 01.05.2008
Offline
113
#9

Да я чисто для упрощения последующих модификаций хочу такое сделать. Уже двиг разросся.. Но я никогда ООП не пользвоал.. Функций хтватает с головой. Но сейчас уже стоОоооооооолько кода что хочется его гибче сделать и прозрачнее... Чем дальше тем больше каши получается... Коменты уже не помогают.. Страницы по 300+кб кода уже...

_vb_
На сайте с 25.07.2009
Offline
104
#10
LEOnidUKG:

Не надо делать ООП, где он вообще не нужен. Это тоже самое, что кувалдой забивать вертикально маленький гвоздик.

Да никакая это не кувалда. Это просто способ представления предметной области в голове у разработчика. Многие считают его более удобным и ясным, чем процедурный подход.

А что насчет вопроса ТС, то ООП - не панацея в вашем случае. Если в коде каша из функций, то при переписывании всего этого по канонам ООП будет просто другая каша - из классов. Можно так же организовать ясную структуру из привычных вам модулей и функций, не притягивая классы. Вам про рефакторинг кода лучше что-нибудь почитать.

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий