С Новым годом! Форум программистов, компьютерный форум, киберфорум
PHP: ООП
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.59/34: Рейтинг темы: голосов - 34, средняя оценка - 4.59
 Аватар для Mashka_mulashka
25 / 25 / 11
Регистрация: 13.12.2011
Сообщений: 818

Как подключить все файлы из папки

06.09.2016, 18:42. Показов 6858. Ответов 20
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
допустим у меня есть папка, которая называется include и в ней файлы

file1.class.php
file2.class.php
...
fileN.class.php

как можно с помощью spl_autoload сделать, что бы все файлы, которые заканчиваются на .class.php подключились?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
06.09.2016, 18:42
Ответы с готовыми решениями:

Функцией FTP закачать все файлы из папки
Задача стоит следующая, залить на сервер FTP все файлы находящиеся в папке temp_files_X (x - id операцииции) в корне сайта. Имена файлов...

Как ввести директорию папки и вывести все файлы и папки в ней?
Необходима программа, которая при вводе директории папки выводит список файлов и папок с их размерами, которые находятся в ней. Посмотрел...

Как сохранить все wma файлы из папки в один, что бы потом сразу все подгружать?
как сохранить все wma файлы из папки в один, что бы потом сразу все подгружать в файл?

20
276 / 201 / 143
Регистрация: 22.01.2016
Сообщений: 637
06.09.2016, 19:40
Возможно вы немного не понимаете принцип работы данной функции. В тот момент, когда создаётся объект, имя класса передаётся в эту функцию. То есть нужно подключать тот или иной класс опираясь не на имя файла (хотя оно желательно должно совпадать с именем класса), а на имя класса. То есть если например есть класс File1Class или File2Class и т.п., то подключение файлов с вашего примера можно реализовать например как-то так
PHP
1
2
3
4
5
spl_autoload_register(function($className) {
    if (preg_match("~^(.+)Class$~", $className, $m)) {
        require_once('include/' . strtolower($m[1]) . '.class.php');
    }
});
0
 Аватар для Gcom
82 / 82 / 18
Регистрация: 03.02.2016
Сообщений: 564
Записей в блоге: 1
07.09.2016, 05:09
Цитата Сообщение от Mashka_mulashka Посмотреть сообщение
как можно с помощью spl_autoload сделать
Что бы еще и решить проблему с путями, добавляем класс (лучше в index.php):
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
class IncludePath
{
    private $pathToDirectory;
    private $aPathToDirectory;
    
    public function setPath($pathToDirectory = '')
    {
        self::setIncludePath(self::getArrayPathToDirectory($pathToDirectory));
        spl_autoload_register(array('self', 'autoloadClass'));
    }
 
    private function getArrayPathToDirectory($pathToDirectory)
    {
        static $aPathToDirectory;
 
        if (!isset($aPathToDirectory)) $aPathToDirectory = array();
 
        if (is_dir($pathToDirectory)) {
            $aNamesFileAndDirectory = scandir($pathToDirectory); 
            
            if (is_array($aNamesFileAndDirectory)) {
                $aNamesFileAndDirectory = array_diff($aNamesFileAndDirectory, array('.', '..'));
                
                if (!empty($aNamesFileAndDirectory)) {
                    
                    foreach($aNamesFileAndDirectory as $nameFileOrDirectory) {
                        $fullPathToFileOrDirectory = $pathToDirectory.DIRECTORY_SEPARATOR.$nameFileOrDirectory;
                        
                        if (is_dir($fullPathToFileOrDirectory)) {
                            
                            $goodPath = explode($_SERVER['DOCUMENT_ROOT'].DIRECTORY_SEPARATOR, $pathToDirectory.DIRECTORY_SEPARATOR.$nameFileOrDirectory.DIRECTORY_SEPARATOR);
                            $aPathToDirectory[] = $goodPath[1];
 
                            self::getArrayPathToDirectory($fullPathToFileOrDirectory);
                        }
                    }
                }
            }
        }
        return $aPathToDirectory;
    }
 
    private function setIncludePath($aPathToDirectory)
    {
        set_include_path('.'.PATH_SEPARATOR.implode(PATH_SEPARATOR, $aPathToDirectory));
    }
 
    private static function autoloadClass($className)
    {
        $fileName = strtolower($className.'.php');
        require_once($fileName);
    }
 
}
 
IncludePath::setPath($_SERVER['DOCUMENT_ROOT']); # создать "дерево" каталогов относительно корневой директории $_SERVER['DOCUMENT_ROOT']
Теперь если вызвать метод MyFunction() класса MyClass мы просто напишем:
PHP
1
MyClass::MyFunction();
Класс автоматом погрузиться и не важно в какой директории будет находиться файл myclass.php с классом MyClass:
PHP
1
2
3
4
5
6
7
8
class MyClass
{
    
    function MyFunction()
    {
        # code...
    }
}
0
 Аватар для Mashka_mulashka
25 / 25 / 11
Регистрация: 13.12.2011
Сообщений: 818
07.09.2016, 09:10  [ТС]
Цитата Сообщение от mrNTF Посмотреть сообщение
Возможно вы немного не понимаете принцип работы данной функции. В тот момент, когда создаётся объект, имя класса передаётся в эту функцию. То есть нужно подключать тот или иной класс опираясь не на имя файла (хотя оно желательно должно совпадать с именем класса), а на имя класса. То есть если например есть класс File1Class или File2Class и т.п., то подключение файлов с вашего примера можно реализовать например как-то так
т.е. имя каждого классп отдельно нужно передавать в эту функцию?
0
07.09.2016, 09:16

Не по теме:

Цитата Сообщение от Gcom Посмотреть сообщение
PHP
1
self::getArrayPathToDirectory
Цитата Сообщение от Gcom Посмотреть сообщение
PHP
1
private function getArrayPathToDirectory
Если self::, то в объявлении метода нужен static, иначе self:: заменить на $this->. У вас в классе ни одного статического метода (кроме autoloadClass), а все вызовы статические - это очень плохо. К тому же есть два закрытых члена, которые нигде не используются.

0
276 / 201 / 143
Регистрация: 22.01.2016
Сообщений: 637
07.09.2016, 09:41
Цитата Сообщение от Mashka_mulashka Посмотреть сообщение
т.е. имя каждого классп отдельно нужно передавать в эту функцию?
Имя передаётся, когда вы создаёте объект. Например
PHP
1
$obj = new File1Class();
в этот момент аргумент $className, который принимает функция
Цитата Сообщение от mrNTF Посмотреть сообщение
spl_autoload_register(function($className)
равняется File1Class.
0
 Аватар для Mashka_mulashka
25 / 25 / 11
Регистрация: 13.12.2011
Сообщений: 818
07.09.2016, 09:54  [ТС]
Цитата Сообщение от mrNTF Посмотреть сообщение
Сообщение от Mashka_mulashka
т.е. имя каждого классп отдельно нужно передавать в эту функцию?
Имя передаётся, когда вы создаёте объект. Например
PHPВыделить код
1
$obj = new File1Class();
в этот момент аргумент $className, который принимает функция
Сообщение от mrNTF
spl_autoload_register(function($classNam e)
равняется File1Class.
значит нужно эту функцию вызвать ровно столько раз, сколько у меня файлов?
0
Диванный эксперт
Эксперт С++
 Аватар для Max Dark
2550 / 2064 / 971
Регистрация: 09.10.2013
Сообщений: 4,793
Записей в блоге: 4
07.09.2016, 09:55
Цитата Сообщение от Mashka_mulashka Посмотреть сообщение
значит нужно эту функцию вызвать ровно столько раз, сколько у меня файлов?
она будет вызвана автоматически при первом обращению к классу
нужно только 1 раз зарегистрировать обработчик
0
 Аватар для Mashka_mulashka
25 / 25 / 11
Регистрация: 13.12.2011
Сообщений: 818
07.09.2016, 09:58  [ТС]
Цитата Сообщение от Cra3y Посмотреть сообщение
она будет вызвана автоматически при первом обращению к классу
нужно только 1 раз зарегистрировать обработчик
я имею ввиду, что функция принимает ClassName, а как я понимаю classname - это имя одного класса. У меня же много классов, соответственно нужно вызвать ее ровно столько раз, сколько у меня classname`ов?
0
276 / 201 / 143
Регистрация: 22.01.2016
Сообщений: 637
07.09.2016, 10:00
Mashka_mulashka, нет, вы просто один раз её прописываете в индексном файле.
0
Диванный эксперт
Эксперт С++
 Аватар для Max Dark
2550 / 2064 / 971
Регистрация: 09.10.2013
Сообщений: 4,793
Записей в блоге: 4
07.09.2016, 10:04
Mashka_mulashka, ее не надо вызывать "руками" - 1 раз регистрируете с помощью spl_autoload_register вашу функцию а дальше все происходит автоматически - php сам вызовет ее когда потребуется.
0
276 / 201 / 143
Регистрация: 22.01.2016
Сообщений: 637
07.09.2016, 10:04
Цитата Сообщение от mrNTF Посмотреть сообщение
в индексном файле
(Единая точка входа)
0
 Аватар для Mashka_mulashka
25 / 25 / 11
Регистрация: 13.12.2011
Сообщений: 818
07.09.2016, 10:22  [ТС]
Цитата Сообщение от mrNTF Посмотреть сообщение
(Единая точка входа)
получается я регистрирую эту функцию, а она по циклу подключает все файлы которые подходят под регулярное выражение?
0
Диванный эксперт
Эксперт С++
 Аватар для Max Dark
2550 / 2064 / 971
Регистрация: 09.10.2013
Сообщений: 4,793
Записей в блоге: 4
07.09.2016, 10:31
Mashka_mulashka, нет никакого цикла.
Вот вам потребовался объект класса ClassA, php смотрит, зарегистрирован ли у него такой.
если нет, то вызывает функцию загрузчика классов с аргументом == имени этого класса('ClassA')
То есть тут работает "ленивое" подключение - загружаются только те файлы, которые действительно нужны.
0
 Аватар для Mashka_mulashka
25 / 25 / 11
Регистрация: 13.12.2011
Сообщений: 818
07.09.2016, 10:34  [ТС]
Цитата Сообщение от Cra3y Посмотреть сообщение
нет никакого цикла.
Вот вам потребовался объект класса ClassA, php смотрит, зарегистрирован ли у него такой.
если нет, то вызывает функцию загрузчика классов с аргументом == имени этого класса('ClassA')
То есть тут работает "ленивое" подключение - загружаются только те файлы, которые действительно нужны.
аааа, понятно. а что если в одном файле нужно подключить сразу 6-7 файлов? как он поступит?
0
Диванный эксперт
Эксперт С++
 Аватар для Max Dark
2550 / 2064 / 971
Регистрация: 09.10.2013
Сообщений: 4,793
Записей в блоге: 4
07.09.2016, 10:37
Цитата Сообщение от Mashka_mulashka Посмотреть сообщение
а что если в одном файле нужно подключить сразу 6-7 файлов? как он поступит?
подключит необходимые файлы в порядке обращения к классам
0
 Аватар для Gcom
82 / 82 / 18
Регистрация: 03.02.2016
Сообщений: 564
Записей в блоге: 1
07.09.2016, 10:40
Цитата Сообщение от Mashka_mulashka Посмотреть сообщение
аааа, понятно. а что если в одном файле нужно подключить сразу 6-7 файлов? как он поступит?
он автоматом подключит эти файлы при каждом вызове методов необходимых классов, т.е.

допустим у нас есть классы:
file1, file2, и т.д. со своими методами
myFunction1, myFunction2 и т.д.
Если мы будем вызывать эти методы:
PHP
1
2
3
file1::myFunction1();
file2::myFunction2();
fileN::myFunctionN();
Автозагрузчик будет автоматом подключать нужные (вызванные) классы и вызывать (вызванные) методы.
0
08.09.2016, 10:17

Не по теме:

Ох, Мария! Цены вам нет. ;)

0
14 / 50 / 3
Регистрация: 26.12.2009
Сообщений: 406
06.10.2016, 00:21
Зачем Вам автозагрузка, если Вы хотите загрузить сразу всю папку?
0
07.10.2016, 00:39

Не по теме:

Я больше чем уверен, что под ником Mashka_mulashka сидит жирный потный мужик и угорает с вас :)

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
07.10.2016, 00:39
Помогаю со студенческими работами здесь

Как в коде указать все папки, из которых нужно удалить все файлы старше 31-го дня?
Привет всем, кто не обошёл вниманием данный пост!:friends: Есть ТЗ: удалять файлы старше 31 дня из заданных папок. Пример -...

Как удалить все файлы из папки
Как удалить ВСЕ файлы из папки?

Как удалить ВСЕ папки и файлы?
как мне стереть полностью все файлы и папки в какойнибудь папке , притом, Kill c:*.* не подходит, так как таким образом только файлы...

Как передать все файлы из папки на FTP?
помогите написать bat файл чтобы с помощью него на ftp копировались все файлы из папки с локального компа set addr=script echo.open...

Как батником заархивировать все файлы и папки?
Как батником заархивировать все файлы и папки, находящиеся в директории D:\1\. имя архива задать текущую дату и время. метод сжатия -...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Первый деплой
lagorue 16.01.2026
Не спеша развернул своё 1ое приложение в kubernetes. А дальше мне интересно создать 1фронтэнд приложения и 2 бэкэнд приложения развернуть 2 деплоя в кубере получится 2 сервиса и что-бы они. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит токи на L и напряжения на C в установ. режимах до и. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru