我是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
我已经更改文件夹以验证是否可以。
答案 0 :(得分:2)
声明该类属于命名空间,您必须以这种方式调用它:
$avaliacaoLocal = new \model\AvaliacaoLocal();
但是现在,命名空间也包含在$class
中,因此自动加载功能需要处理:
function __autoload($class)
{
$file = str_replace(array('_', '\\'), '/', $class) . '.php';
if (is_file($file)) {
require $file;
}
}
此函数获取$class
值,并使用\
替换命名空间中的每个_
(和/
)以获取文件名。