Автозагрузка класса не работает

1

Я новичок в PHP разработке, и я столкнулся с проблемой в моем развитии в PHP OO. Я видел, что лучше использовать функцию autoload() чем include каждый файл PHP Class.

Я сомневаюсь: почему моя функция автозагрузки не работает?

Следуйте моему коду:

<?php
function __autoload($class)
{
    include_once "model/{$class}.class.php";
}

$avaliacaoLocal = new AvaliacaoLocal();
$avaliacaoLocal->setId(1);
$avaliacaoLocal->setIdLocal(2);
$avaliacaoLocal->setComentarios("Comentários de Pedro");
$avaliacaoLocal->setIdPessoaCliente(3);
$avaliacaoLocal->setValor(5);
var_dump($avaliacaoLocal);

Файл AvaliacaoLocal.class.php

<?php
namespace model;

class AvaliacaoLocal
{
    private $id;
    private $valor;
    private $comentarios;
    private $idLocal;
    private $idPessoaCliente;

    public function __construct(){

        $this->clear();

    }

    public function clear(){

        $this->id = 0;
        $this->valor = 0;
        $this->comentarios = "";
        $this->idLocal = null;
        $this->idPessoaCliente = null;
    }

    public function getId()
    {
        return $this->id;
    }

    public function setId($id)
    {
        $this->id = $id;
    }

    public function getValor()
    {
        return $this->valor;
    }

    public function setValor($valor)
    {
        $this->valor = $valor;
    }

    public function getComentarios()
    {
        return $this->comentarios;
    }


    public function setComentarios($comentarios)
    {
        $this->comentarios = $comentarios;
    }

    public function getIdLocal()
    {
        return $this->idLocal;
    }

    public function setIdLocal($idLocal)
    {
        $this->idLocal = $idLocal;
    }

    public function getIdPessoaCliente()
    {
        return $this->idPessoaCliente;
    }

    public function setIdPessoaCliente($idPessoaCliente)
    {
        $this->idPessoaCliente = $idPessoaCliente;
    }

}

Ошибка:

PHP Неустранимая ошибка: Class 'AvaliacaoLocal' не найден в C:\Users\Pedro........\index.php в строке 14

ОБНОВИТЬ:

Когда я использую include PHP возвращает ту же ошибку:

Неустранимая ошибка: класс "AvaliacaoLocal" не найден в C:\Program Files\VertrigoServ\www\system\index.php в строке 10

У меня есть папка смены, чтобы проверить, может ли это быть.

  • 0
    Просто чтобы быть уверенным, AvaliacaoLocal хранится в model Folde? Вы пытались указать абсолютный путь к файлу, например /var/www/project/model ?
  • 0
    Какова ваша текущая структура папок?
Показать ещё 2 комментария
Теги:
autoload
php-5.5

1 ответ

1
Лучший ответ

Класс объявляется принадлежащим пространству имен, вы должны вызвать его таким образом:

$avaliacaoLocal = new \model\AvaliacaoLocal();

Но теперь пространство имен также включено в $class, поэтому функция автозагрузки должна обрабатывать это:

function __autoload($class)
{
    $file = str_replace(array('_', '\\'), '/', $class) . '.php';

    if (is_file($file)) {
        require $file;
    }
}

Эта функция принимает значение $class и заменяет все \_) из пространства имен на / чтобы получить имя файла.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню