Espaços de nomes PHP e "usar"

Estou a ter alguns problemas com os espaços de nomes e as declarações.

Tenho três ficheiros.: ShapeInterface.php, Shape.php e Circle.php

estou a tentar fazer isto usando caminhos relativos por isso coloquei isto em todas as classes:

namespace Shape; 

na minha aula de círculo tenho o seguinte:

namespace Shape;
//use Shape;
//use ShapeInterface;

include 'Shape.php';
include 'ShapeInterface.php';    

class Circle extends Shape implements ShapeInterface{ ....

Se eu usar as declarações include não recebo erros. Se eu tentar as declarações use recebo:

erro Fatal: A classe 'forma\forma' não foi encontrada em / Users / shawn / Documents/work/sites/workspace/shape / Circle.php na linha 8

Alguém me pode dar alguma orientação sobre o assunto?

Author: Sunny Patel, 2012-05-11

2 answers

A use o operador é para dar nomes alternativos aos nomes de classes, interfaces ou outros espaços de nomes. A maioria das declarações use referem-se a um espaço de nomes ou classe que gostaria de abreviar:

use My\Full\Namespace;

É equivalente a:

use My\Full\Namespace as Namespace;
// Namespace\Foo is now shorthand for My\Full\Namespace\Foo

Se o operador use for utilizado com um nome de classe ou interface, tem as seguintes utilizações:

// after this, "new DifferentName();" would instantiate a My\Full\Classname
use My\Full\Classname as DifferentName;

// global class - making "new ArrayObject()" and "new \ArrayObject()" equivalent
use ArrayObject;

O operador usenão deve ser confundido com autoloading. Uma classe é autolocada (negando a necessidade de include) por registar um autoloader (por exemplo, com spl_autoload_register). Você pode querer ler PSR-4 para ver uma implementação de autoloader adequada.

 141
Author: cmbuckley, 2018-06-28 07:07:25

Se precisar de encomendar o seu código em espaços de nomes, basta usar a palavra-chave namespace:

File1.php

namespace foo\bar;

In file2.php

$obj = new \foo\bar\myObj();

Também pode utilizar use. Se no ficheiro 2 colocar

use foo\bar as mypath;

Tem de usar {[6] } em vez de bar em qualquer parte do ficheiro:

$obj  = new mypath\myObj();

Usar use foo\bar; é igual a use foo\bar as bar;.

 7
Author: Charlie H, 2018-09-19 00:02:31