Я новичок в 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
У меня есть папка смены, чтобы проверить, может ли это быть.
Класс объявляется принадлежащим пространству имен, вы должны вызвать его таким образом:
$avaliacaoLocal = new \model\AvaliacaoLocal();
Но теперь пространство имен также включено в $class
, поэтому функция автозагрузки должна обрабатывать это:
function __autoload($class)
{
$file = str_replace(array('_', '\\'), '/', $class) . '.php';
if (is_file($file)) {
require $file;
}
}
Эта функция принимает значение $class
и заменяет все \
(и _
) из пространства имен на /
чтобы получить имя файла.
AvaliacaoLocal
хранится вmodel
Folde? Вы пытались указать абсолютный путь к файлу, например/var/www/project/model
?