Class 自动加载不工作

Class autoload not working

我是 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 Fatal error: Class 'AvaliacaoLocal' not found in C:\Users\Pedro ........\index.php on line 14

更新:

当我使用include和PHPreturns同样的错误:

Fatal error: Class 'AvaliacaoLocal' not found in C:\Program Files\VertrigoServ\www\system\index.php on line 10

我已经更改文件夹以验证是否可以。

class声明属于一个命名空间,你必须这样调用它:

$avaliacaoLocal = new \model\AvaliacaoLocal();

但是现在,命名空间也包含在$class中,所以自动加载函数需要处理:

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

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

此函数采用 $class 值并将命名空间中的每个 \(和 _)替换为 / 以获取文件名。