没有告诉我买书,有人会有兴趣回答以下问题吗?
如果我在一个名为foo的类的命名空间中。我想建立另一个名为bar的类。我怎么会继续做foo,知道吧,反之亦然?费用是多少?请记住,可能存在一个完整的有用类的缩影
答案 0 :(得分:4)
没有书,只有see the namespace documentation
如果您的类位于不同的名称空间中:
<?php
namespace MyProject;
class Bar { /* ... */ }
namespace AnotherProject;
class Foo{ /* ... */
function test() {
$x = new \MyProject\Bar();
}
}
?>
如果这些类在同一个命名空间中,那就像没有命名空间一样。
答案 1 :(得分:2)
关于命名空间问题,我引用tuergeist's answer。在OOP方面,我只能说这个提出的Foo
和Bar
的相互意识对此有轻微的嗅觉。您更愿意使用接口,并让实现类具有对接口的引用。这可能是'dependency inversion'。
interface IFoo {
function someFooMethod();
}
interface IBar {
function someBarMethod();
}
class FooImpl1 {
IBar $myBar;
function someImpl1SpecificMethod(){
$this->myBar->someBarMethod();
}
function someFooMethod() { // implementation of IFoo interface
return "foostuff";
}
}
答案 2 :(得分:0)
您还可以使用using语句使用其他名称空间中的其他类。以下示例在您的命名空间中实现了几个核心类:
namspace TEST
{
using \ArrayObject, \ArrayIterator; // can now use by calling either without the slash
class Foo
{
function __construct( ArrayObject $options ) // notice no slash
{
//do stuff
}
}
}