- Поисковые системы
- Практика оптимизации
- Трафик для сайтов
- Монетизация сайтов
- Сайтостроение
- Социальный Маркетинг
- Общение профессионалов
- Биржа и продажа
- Финансовые объявления
- Работа на постоянной основе
- Сайты - покупка, продажа
- Соцсети: страницы, группы, приложения
- Сайты без доменов
- Трафик, тизерная и баннерная реклама
- Продажа, оценка, регистрация доменов
- Ссылки - обмен, покупка, продажа
- Программы и скрипты
- Размещение статей
- Инфопродукты
- Прочие цифровые товары
- Работа и услуги для вебмастера
- Оптимизация, продвижение и аудит
- Ведение рекламных кампаний
- Услуги в области SMM
- Программирование
- Администрирование серверов и сайтов
- Прокси, ВПН, анонимайзеры, IP
- Платное обучение, вебинары
- Регистрация в каталогах
- Копирайтинг, переводы
- Дизайн
- Usability: консультации и аудит
- Изготовление сайтов
- Наполнение сайтов
- Прочие услуги
- Не про работу
В 2023 году 36,9% всех DDoS-атак пришлось на сферу финансов
А 24,9% – на сегмент электронной коммерции
Оксана Мамчуева
Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий
Здравствуйте. Я только начал С ООП и еще не въехал, да и еще и путаюсь.
У меня есть папка с модулями.. и их уже много, кода на сайте много, и хочется его перевести на ООП, а я им никогда не пользоватлся (кроме сторонных кодов конечно).
Нужно что бы мой класс читал файлы, и дополнял основной класс функциями из этой папки, так что бы я их вызывал из этого класса.
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);
Но для меня это пока дремучий лес. Лучше все по порядку. Помогите пожалуйста.
Нужно что бы мой класс читал файлы, и дополнял основной класс функциями из этой папки, так что бы я их вызывал из этого класса.
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();
множественное наследование в пхп насколько я помню не поддерживается, по-этому
и т.п. Сами функции из модулей будут вызываться позднеее...
Но для меня это пока дремучий лес. Лучше все по порядку. Помогите пожалуйста.
и просьба не пользоваться красными выделениями без надобности, в глазах сутра рябит
//десятьбукоф
внутри класса не используй 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
это в двух словах.
а вобще читай мануал - там есть все.
"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;
}
}
в родителя нельзя «вставить» новый метод, можно лишь через дочерний класс унаследовать родительские свойства и методы, а затем расширить, что собственно и посоветовали выше. и вообще, автор, сначала упорно читают мануал, а потом берутся за код, а не наоборот. ооп/классы нужно использовать там где ты чувствуешь что будет правильней, а не просто от фонаря.
И только там, когда делается или сторонний класс в 1 файле или же система на которой работают много людей. В противном случаи, обычных функций больше, чем достаточно.
в родителя нельзя «вставить» новый метод, можно лишь через дочерний класс унаследовать родительские свойства и методы
Вообще, "добавить" метод к уже существующему классу возможно.. если воспользоваться "магическим" __call, однако, перед этим не мешало бы освоить немагические :)
Prosto_niki, удачи в освоении :)
И только там, когда делается или сторонний класс в 1 файле или же система на которой работают много людей. В противном случаи, обычных функций больше, чем достаточно.
"Не всегда" (С)
Мне, например, запись
милее глазу, чем
PS :)
А мне лично нет :)
Поэтому глазки у всех разные :)
Не надо делать ООП, где он вообще не нужен. Это тоже самое, что кувалдой забивать вертикально маленький гвоздик. Забить можно, но трудозатрат больше.
---------- Добавлено 26.06.2012 в 20:35 ----------
ps. вообще удаляюсь, а то сейчас начнётся сразу, что лучше :)
Да я чисто для упрощения последующих модификаций хочу такое сделать. Уже двиг разросся.. Но я никогда ООП не пользвоал.. Функций хтватает с головой. Но сейчас уже стоОоооооооолько кода что хочется его гибче сделать и прозрачнее... Чем дальше тем больше каши получается... Коменты уже не помогают.. Страницы по 300+кб кода уже...
Не надо делать ООП, где он вообще не нужен. Это тоже самое, что кувалдой забивать вертикально маленький гвоздик.
Да никакая это не кувалда. Это просто способ представления предметной области в голове у разработчика. Многие считают его более удобным и ясным, чем процедурный подход.
А что насчет вопроса ТС, то ООП - не панацея в вашем случае. Если в коде каша из функций, то при переписывании всего этого по канонам ООП будет просто другая каша - из классов. Можно так же организовать ясную структуру из привычных вам модулей и функций, не притягивая классы. Вам про рефакторинг кода лучше что-нибудь почитать.