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

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

06.09.2016, 18:42. Показов 6897. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Символьное дифференцирование
igorrr37 13.02.2026
/ * Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет значение производной при заданном х Логарифм записывается как: (x-2)log(x^2+2) -. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru