Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737 Форумы портала PHP.SU :: Помогите разобраться с наследованием....
Покинул форум
Сообщений всего: 3
Дата рег-ции: Май 2014 Откуда: Одесса
Помог: 0 раз(а)
Всем доброго времени!
Не могу понять вот такую вещь....
Задача, такая: нужно записывать различные файлы в свои папки на сервере, т.е. текстовые файлы в папку text, картинки в images, mp3 в папку music и т.д.
Для унификации и простоты добавления кода для загрузки новых типов файлов в какие-либо другие папки решил сделать один общий абстрактный класс Upload, и наследовать его уже в классах UploadText, UploadImage, UploadMusic и т.д. Привожу код ниже...
abstract class Upload {//абстрактный класс для загрузки файлов
public static $dir;//директория для загрузки
public static function uploadFile($file){
$uploadfile= self::$dir."/".$file["name"];//указываем папку и имя файла
returnmove_uploaded_file($file["tmp_name"],$uploadfile);//для вывода инфы пользователю о результате записи
}
class UploadText extends Upload {//класс кдля загрузки текстовых файлов
public static $dir="text";//указываем директорию для загрузки text
}
class UploadImage extends Upload {//класс кдля загрузки картинок файлов
public static $dir="images";//указываем директорию для загрузки images
}
UploadText::uploadFile($_FILES["text"]);//вызываем метод загрузки тестового файла
Ну и т.д. ....
Так вот вопрос состоит в том, что в переменную $dir класса Upload не передается значение переменной $dir из класса UploadText. Почему???
IllusionMH
Отправлено: 29 Мая, 2014 - 18:14:22
Активный участник
Покинул форум
Сообщений всего: 4254
Дата рег-ции: Февр. 2011 Откуда: .kh.ua
Помог: 242 раз(а)
A1ex_1984, если еще правильно помню, то self::$dir это обращание к свойству прописанному непосредственно в этом классе. Попробуйте $this->dir
Panoptik
Отправлено: 29 Мая, 2014 - 18:19:33
Постоянный участник
Покинул форум
Сообщений всего: 2493
Дата рег-ции: Нояб. 2011 Откуда: Одесса, Украина
Помог: 131 раз(а)
вообще идея конечно хорошая, но вы можете для себя определиться какие именно функции будут выполнять ваши классы? и какие существенные отличия у них будут?
если только директория для хранения, то имхо много классов - это лишнее
----- Just do it
esterio
Отправлено: 29 Мая, 2014 - 18:32:07
Активный участник
Покинул форум
Сообщений всего: 5025
Дата рег-ции: Нояб. 2012 Откуда: Украина, Львов
если только директория для хранения, то имхо много классов - это лишнее
Замены условного оператора полиморфизмом, строго по Фаулеру.
Но лучше отказаться от статических членов, добавить фабрику, явно описать интерфейс - получится простой и легко расширяемый код.
Ну и, разумеется, объявить директорию protected.
----- PostgreSQL DBA
Panoptik
Отправлено: 29 Мая, 2014 - 19:28:30
Постоянный участник
Покинул форум
Сообщений всего: 2493
Дата рег-ции: Нояб. 2011 Откуда: Одесса, Украина
Помог: 131 раз(а)
Мелкий пишет:
Замены условного оператора полиморфизмом, строго по Фаулеру.
а еще есть такое
Цитата:
дополнительная абстакция может решить любую проблему кроме проблемы лишних абстракций
вот к чему я. нужно везде находить решения к месту а не лупить из пушек по комарам
----- Just do it
EuGen
Отправлено: 29 Мая, 2014 - 19:44:28
Профессионал
Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007 Откуда: Berlin
Помог: 707 раз(а)
Panoptik пишет:
ужно везде находить решения к месту а не лупить из пушек по комарам
В зависимости от контекста, может быть той самой ошибкой, в которую так часто попадают новички. Если код будет использоваться единожды - то - возможно. Но в общем случае:
- Что, если мы захотим загружать файл не в локальную ФС, а передавать по сети?
- Что, если мы захотим добавить возможность фильтрации типа/расширения файла?
- А если нам будет нужно сжатие?
- Или мы захотим загружать не файл, а поток?
- {...}
Преждевременное решение - тоже не лучший вариант, однако, чаще всего, потраченные на архитектуру часы в прошлом сэкономят дни (месяцы) доработки в будущем.
----- Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
Мелкий
Отправлено: 29 Мая, 2014 - 20:20:55
Активный участник
Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009 Откуда: Россия, Санкт-Петербург
Помог: 618 раз(а)
Panoptik пишет:
дополнительная абстакция может решить любую проблему кроме проблемы лишних абстракций
Но абстракция же одна и та же - upload. Разная реализация.
----- PostgreSQL DBA
A1ex_1984
Отправлено: 31 Мая, 2014 - 18:44:32
Новичок
Покинул форум
Сообщений всего: 3
Дата рег-ции: Май 2014 Откуда: Одесса
Помог: 0 раз(а)
Только спустя 2 дня смог добраться до своего проекта, пока только учусь и познаю основы ООП в PHP.
Спасибо, EuGen, так все заработало.
Panoptik пишет:
вот к чему я. нужно везде находить решения к месту а не лупить из пушек по комарам
Это не стрельба из пушек по воробьям, там как правильно подметил EuGen еще много чего делается с файлами и фильтрация и архивация, просто привел кусок кода...
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.