Espaços de nomes PHP e "usar"
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:
Alguém me pode dar alguma orientação sobre o assunto?erro Fatal: A classe 'forma\forma' não foi encontrada em / Users / shawn / Documents/work/sites/workspace/shape / Circle.php na linha 8
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 use
nã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.
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;
.