类自动加载不起作用

时间:2016-01-26 21:13:13

标签: php autoload php-5.5

我是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致命错误:在C:\ Users \ Pedro中找不到类'AvaliacaoLocal'   第14行........ \ index.php

更新:

当我使用include时,PHP会返回相同的错误:

  

致命错误:在C:\ Program中找不到类'AvaliacaoLocal'   第10行的Files \ VertrigoServ \ www \ system \ index.php

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

1 个答案:

答案 0 :(得分:2)

声明该类属于命名空间,您必须以这种方式调用它:

$avaliacaoLocal = new \model\AvaliacaoLocal();

但是现在,命名空间也包含在$class中,因此自动加载功能需要处理:

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

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

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