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
Форумы портала PHP.SU :: Версия для печати :: Не находит класс.
Форумы портала PHP.SU » » Объектно-ориентированное программирование » Не находит класс.

Страниц (1): [1]
 

1. Doox911 - 02 Июля, 2018 - 15:31:23 - перейти к сообщению
Доброго времени суток.

Написал сайт по модели MVC.

При ajax запросе выдаёт:
PHP:
скопировать код в буфер обмена
  1.  
  2. PHP Fatal error:  Class 'User' not found in
  3.  


Каждый класс в отдельном файле. Подгружаю классы так:
PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3. /*
  4. */
  5. function __autoload($class_name){
  6.         $array_paths = array(
  7.                 '/models/',
  8.                 '/components/'
  9.         );
  10.  
  11.         foreach ($array_paths as $path) {
  12.                 $path = ROOT . $path . $class_name . '.php';
  13.                 if (is_file($path)) {
  14.                         include_once $path;
  15.                 }
  16.         }
  17. }
  18.  

В контроллере вызываю метод:
PHP:
скопировать код в буфер обмена
  1.  
  2. $mail->isSMTP();
  3. $mail->Host = 'smtp.yandex.ru';
  4. $mail->SMTPAuth = true;
  5. $mail->Username = '***';
  6. $mail->Password = '***';
  7. $mail->SMTPSecure = 'ssl';
  8. $mail->Port = 465;
  9. $mail->CharSet = 'UTF-8';
  10. $mail->setFrom( '***', 'ООО "Фирма"' );
  11. $mail->addAddress( User::getUserEmail() );
  12. $mail->isHTML(true);
  13. $mail->Subject = 'Смена статуса';
  14. $mail->Body    = $text;
  15. $mail->send();
  16.  

В чём прикол? Ничего до вызова метода не вывожу.
(Добавление)
записал результат в переменную до объявления объекта phpmailer, ошибка пропала. Я так понимаю phpmailer мог уже заголовки отправить?
2. andrewkard - 02 Июля, 2018 - 16:41:48 - перейти к сообщению
Doox911 пишет:
записал результат в переменную до объявления объекта phpmailer, ошибка пропала. Я так понимаю phpmailer мог уже заголовки отправить?

думаю дело в этой строке:
Doox911 пишет:
$mail->addAddress( User::getUserEmail() );

(Добавление)
Ваш автолоадер не работает.
3. Doox911 - 02 Июля, 2018 - 18:02:52 - перейти к сообщению
В целом сайт работает. А как проверить его корректную работоспособность? То что в этой строке проблема это и так понятно))) PHP выдаёт. Вопрос почему!
4. andrewkard - 02 Июля, 2018 - 18:45:10 - перейти к сообщению
debug в помощь, вызывается ли автолоадер, по какому пути ищет файлы и т.д.
5. haveFun - 13 Июля, 2018 - 18:04:36 - перейти к сообщению
используйте композер, к чему эти велосипеды?
6. nefone - 22 Ноября, 2020 - 21:55:03 - перейти к сообщению
Перед тем, как подключать файлы с помощью include или require полезно проверить его наличие функцией file_exists()
PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3. function __autoload($class_name){
  4.         $array_paths = array(
  5.                 '/models/',
  6.                 '/components/'
  7.         );
  8.  
  9.         foreach ($array_paths as $path) {
  10.                 $path = ROOT . $path . $class_name . '.php';
  11.                 if (is_file($path) && file_exists($path)) {
  12.                         include_once $path;
  13.                 }
  14.         }
  15. }
  16.  
7. LIME - 23 Ноября, 2020 - 06:38:41 - перейти к сообщению
nefone допустим, но
1. какой смысл это делать для пакетов? то есть мы тихо проходим мимо если не нашли файл - и тут же вываливаемся с ошибкой при использовании неподключенного пакета).
уж лучше громко кричать чтоб было видно еще на этапе разработки
2. а зачем file_exists если уже проверили is_file? может там лучше class_exists, чтоб понять содержит ли файл нужный класс?
(Добавление)
haveFun пишет:
используйте композер, к чему эти велосипеды?
согласен
но поиграться с велосипедами всеже полезно для начала

 

Powered by ExBB FM 1.0 RC1