пространство имен php [дубликат]


Я хотел углубляться больше в namespace, однако из способов, который я пытаюсь, дает ошибка. Ниже в двух формах:

Мой класс, который находится внутри директории classes/класса.php

namespace minhaClasse;
class classe
{
  public function testes(){
    return "ok.. retornou!";
  }
}

файл index.php, который находится в корневой директории

<?php
use minhaClasse\classe;
$ver = new classe();
echo $ver->testes();
?>

Когда я делаю это, появляется следующее сообщение об ошибке:

Fatal error: Class 'myclass\класс' not found in...

, То изменил для этой формы индекса.php

spl_autoload_extensions(".php");
spl_autoload_register();
use minhaClasse\classe;
$ver = new classe();
echo $ver->testes();

Там появляется эта ошибка:

Fatal error: spl_autoload(): Class myclass\класс could not be loaded in...

Author: novic, 2016-11-06

1 answers

Для работы такого кода и автоматически загружать namespace каталоги должны следовать тем же именем, которые находятся в namespace, в вашем случае уже имеет проблемы, каталог должен быть minhaClasse/classe.php, или же namespace должно быть use classes\classe; (внутри класса только namespace classes;) любой из вариантов может сработать.

Отредактируйте namespace его classe classes для использования use classes\classe:

namespace classes;

class classe
{
  public function testes(){
    return "ok.. retornou!";
  }
}

И в вашем коде, за изменение namespace, что это будет работать:

spl_autoload_extensions(".php");
spl_autoload_register();

use classes\classe;

$ver = new classe();
echo $ver->testes();

Примечание: имена namespace и pastas (который должен иметь то же имя) бы последовать имена более простой, возможно и без ссылается на имена, которые могут затруднить чтение, это может привести к путанице classes\classe


Например minimo:

inserir a descrição da imagem aqui

Код класса Car следующий (обратите внимание на namespace имя diretório изображение):

<?php

namespace Novic;

class Car 
{
    private $active = 1;

    public function getActive()
    {
        return $this->active;
    }
    public function setActive($value)
    {
        return $this->active = $value;
    }
}

В предыдущую папку (например, в папке test1) был создан index.php следующий код:

<?php

spl_autoload_extensions(".php");
spl_autoload_register();

use Novic\Car;

$car = new Car();
echo $car->getActive();

namespace, используемый Novic\Car, относящийся к папке и класс.


Чтение:

Есть здесь, на сайте , Как работают пространства имен в PHP?, а также PSR-4, что это хорошо использовать.

Фильмография:

 9
Author: novic, 2017-04-13 12:59:38