Форум программистов, компьютерный форум, киберфорум
PHP: ООП
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.62/13: Рейтинг темы: голосов - 13, средняя оценка - 4.62
1 / 1 / 0
Регистрация: 12.12.2015
Сообщений: 89
1

Автоподключение классов

06.04.2016, 17:08. Показов 2641. Ответов 33
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Написал скрипт:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
function Autoload($name){
    $class_pieces = explode('\\', $name);
    switch ($class_pieces[0]){
        case 'app':
            $path = __DIR__ . '\\' . implode(DIRECTORY_SEPARATOR, $class_pieces) . '.php';
            if (file_exists($path)){
                require_once $path;
            }
            else {
                 echo "The file $path does not exist";
            }
    }
}
spl_autoload_register('Autoload'); 
$router = new \app\Router();
$router->start();
В части:
PHP
1
2
3
4
5
6
if (file_exists($path)){
                require_once $path;
            }
            else {
                 echo "The file $path does not exist";
            }
Выполняется первое условие. Т.е. файл существует, путь верный. Но дальше вылазит ошибка:
Fatal error: Class 'app\Router' not found in C:\server\Site\OpenServer\domains\rainforest\Vasilisk\index.php on line 19
Что не так? Сделал все по уроку. У автора работает.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
06.04.2016, 17:08
Ответы с готовыми решениями:

Автоподключение
Можно ли как-то сделать автоподключение к серверу при запуске бд или открытии формы?

Автоподключение к wi-fi
Как отключить автоподключение к wi-fi?

автоподключение в фоне
здравствуйте. подключение к интернет по pppoe, для автоподключения оного на старте системы в раздел...

Автоподключение к нэту
Как сделать чтобы нэт включался при включении компа?

33
wq
85 / 78 / 32
Регистрация: 26.11.2015
Сообщений: 481
06.04.2016, 22:17 21
Author24 — интернет-сервис помощи студентам
Цитата Сообщение от pav1uxa Посмотреть сообщение
А Вы каждый раз перед созданием объекта или при других обращениях к классу используете class_exists?
зачем передергивать? ситуации проверки наличия класса возможны. Раз эта функция существует ей могут воспользоваться. ну хорошо, можно и так: напишем доку в которой опишем вызов каких функций в нашем приложении положит его...
0
Эксперт PHP
936 / 693 / 236
Регистрация: 01.02.2015
Сообщений: 1,848
06.04.2016, 22:21 22
@ это единственный способ перехватить критическую ошибку и обработать ее в своем обработчике
0
1943 / 1768 / 825
Регистрация: 23.01.2014
Сообщений: 6,230
06.04.2016, 22:25 23
Цитата Сообщение от wq Посмотреть сообщение
зачем передергивать? ситуации проверки наличия класса возможны. Раз эта функция существует ей могут воспользоваться. ну хорошо, можно и так: напишем доку в которой опишем вызов каких функций в нашем приложении положит его...
Вам написали Выше - подобные проблемы решаются на этапе разработки. Если Вы залили сайт на хостинг, а файл класса не залили - сразу увидите ошибку и исправите. После этого эти ошибки невозможны в принципе. Сам по себе в коде неизвестный класс в процессе пользования сайтом не появится, понимаете?

Как Вы себе это представляете, Вы используете в коде какой то класс, а создать класс забыли? Я не представляю.

Цитата Сообщение от wq Посмотреть сообщение
ну хорошо, можно и так: напишем доку в которой опишем вызов каких функций в нашем приложении положит его...
Это вообще к чему? Естественно обращение к несуществующему классу будет ложить приложение, хоть пишите доку хоть не пишите. А вот обращение к несуществующему файлу ничего не положит, это всего лишь Warning, который опять же, лечится на стадии разработки.
0
wq
85 / 78 / 32
Регистрация: 26.11.2015
Сообщений: 481
07.04.2016, 15:16 24
Цитата Сообщение от pav1uxa Посмотреть сообщение
Естественно обращение к несуществующему классу будет ложить приложение, хоть пишите доку хоть не пишите. А вот обращение к несуществующему файлу ничего не положит, это всего лишь Warning, который опять же, лечится на стадии разработки
Ну, я понял, про плагины вы не слышали...Poznakomlus, вас тоже касается
и главное непонятно упорство достойного другого применения, с попыткой доказать теорию, о том что писать автолоад можно в сокращенном варианте, а не так как нужно, хотя код "так как нужно" будет больше на один оператор

Не по теме:

Цитата Сообщение от Poznakomlus Посмотреть сообщение
@ это единственный способ перехватить критическую ошибку
не единственный

0
1 / 1 / 0
Регистрация: 12.12.2015
Сообщений: 89
07.04.2016, 16:11  [ТС] 25
Проблема в том, что вариант Poznakomlus, пытается подключить все подряд, если подключать не надо, то выдает ошибку. Если взять мой вариант, и убрать лишнее (проверку), то я могу управлять списком подключений.
0
1943 / 1768 / 825
Регистрация: 23.01.2014
Сообщений: 6,230
07.04.2016, 16:36 26
Цитата Сообщение от Vassillissk Посмотреть сообщение
пытается подключить все подряд, если подключать не надо, то выдает ошибку
Это Вы о чем?
0
1 / 1 / 0
Регистрация: 12.12.2015
Сообщений: 89
07.04.2016, 17:23  [ТС] 27
db::Connect(DB_SERVER, DB_USERNAME, DB_PASSWORD, DB_DATABASE);
Он пытается подключить, и выдает ошибку: не удалось подключить. Если вернуть мой скрипт, то там указывается какие директории надо подключать и все работает.
0
Эксперт PHP
936 / 693 / 236
Регистрация: 01.02.2015
Сообщений: 1,848
07.04.2016, 21:00 28
Цитата Сообщение от wq Посмотреть сообщение
Ну, я понял, про плагины вы не слышали
нет, не слышал. Просвети если знаешь больше.
В php есть расширения (extensions), приходилось писать под OpenCV и Tesseract.
Плагины это ваши заблуждения от фреймворков и библиотек.
Цитата Сообщение от wq Посмотреть сообщение
а не так как нужно
Скажу по секрету, он нужен по сути для разработки и разработчиков.
Цитата Сообщение от wq Посмотреть сообщение
больше на один оператор
Проверка наличия файла тяжелая операция.(А бывают и диски сыпятся)
Цитата Сообщение от wq Посмотреть сообщение
не единственный
PHP
1
require 'test';
а ну ка перехвати, так может писать человек ни разу не пробовавший работать с set_error_handler
Vassillissk, с какого планетария
Цитата Сообщение от Vassillissk Посмотреть сообщение
пытается подключить все подряд, если подключать не надо,
это о чем и это db::Connect(DB_SERVER, DB_USERNAME, DB_PASSWORD, DB_DATABASE);
че не увидел, что нет папки App
Цитата Сообщение от Vassillissk Посмотреть сообщение
$router = new \app\Router();
Цитата Сообщение от Vassillissk Посмотреть сообщение
C:\server\Site\OpenServer\domains\rainforest\Vasilisk\index.php
0
wq
85 / 78 / 32
Регистрация: 26.11.2015
Сообщений: 481
07.04.2016, 21:10 29
Цитата Сообщение от Poznakomlus Посмотреть сообщение
А бывают и диски сыпятся
поздравляю, приехали. понимаю что вы экономите деньги используя пхп, но не на столько же.
Цитата Сообщение от Poznakomlus Посмотреть сообщение
Сообщение от wq
не единственный
PHPВыделить код
1
require 'test';
???? это что?
с упорством, с каким вы предлагаете кривокодить, выкидывать элементарные проверки, вы бы уже десять программ написали. Но доказывать чушь о том что от file_exists диски сыпятся куда интереснее
0
1 / 1 / 0
Регистрация: 12.12.2015
Сообщений: 89
07.04.2016, 21:14  [ТС] 30
Я вообще не понял, о чем вы. Это моя первая работа. Точнее попытки ее сделать. Если использовать ваш код, то при добавлении строчки
PHP
1
db::Connect(DB_SERVER, DB_USERNAME, DB_PASSWORD, DB_DATABASE);
Появляется ошибка в месте:
PHP
1
include str_replace('\\', '/', $class) . '.php';
Если использовать мою версию:
PHP
1
2
3
4
switch ($class_pieces[0]){
        case 'app':
            require_once __DIR__ . '\\' . implode(DIRECTORY_SEPARATOR, $class_pieces) . '.php';
    }
То ошибки нет. Я полагаю, что это из-за того, что указанно подключать только при "case 'app':".
0
wq
85 / 78 / 32
Регистрация: 26.11.2015
Сообщений: 481
07.04.2016, 21:21 31
Poznakomlus, сразу не понял к чему вы это
Цитата Сообщение от Poznakomlus Посмотреть сообщение
require 'test';
но вы же утверждали что собака это "единственный" способ.
PHP
1
2
3
4
5
6
ob_start();
register_shutdown_function(function(){
    ob_end_clean();
    echo 'собака не единственный способ ловить фатальные ошибки. Прежде чем начинать сокращать php его следует хотя бы изучить';
});
require 'test';
0
1 / 1 / 0
Регистрация: 12.12.2015
Сообщений: 89
07.04.2016, 21:25  [ТС] 32
wq, прошу вас перестать ругаться и перейти в мою следующую тему, она актуальней.
Обращение к разным классам из класса
0
wq
85 / 78 / 32
Регистрация: 26.11.2015
Сообщений: 481
07.04.2016, 21:28 33
:black_eye.:
0
Эксперт PHP
936 / 693 / 236
Регистрация: 01.02.2015
Сообщений: 1,848
07.04.2016, 21:41 34
Цитата Сообщение от wq Посмотреть сообщение
но вы же утверждали что собака это "единственный" способ
именно так потому как код не работает в командной строке (CLI)
и тогда придется писать правила предложенные вами
PHP Fatal error: require(): Failed opening required 'test'
0
07.04.2016, 21:41
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.04.2016, 21:41
Помогаю со студенческими работами здесь

Автоподключение rvm
Что бы можно было взаимодействовать с рельсами, при открытии терминала мне нужно выполнять source...

Автоподключение проектора
Имеется ноутбуки с видеочипсетами intel и nvidea на XP которые нужно подключать к проекторам. Люди...

Windows 10 автоподключение wifi
Вобщем хотел узнать как сделать что бы когда виндовс 10 загрузился чтобы автоматом не только шло...

Автоподключение по telnet, ssh
Добрый день! подскажите, как создать кнопку запуска на рабочем столе, чтобы при выполнении...


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

Или воспользуйтесь поиском по форуму:
34
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru