PHP的基本OO

时间:2009-11-04 08:11:09

标签: php namespaces

没有告诉我买书,有人会有兴趣回答以下问题吗?

如果我在一个名为foo的类的命名空间中。我想建立另一个名为bar的类。我怎么会继续做foo,知道吧,反之亦然?费用是多少?请记住,可能存在一个完整的有用类的缩影

3 个答案:

答案 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方面,我只能说这个提出的FooBar的相互意识对此有轻微的嗅觉。您更愿意使用接口,并让实现类具有对接口的引用。这可能是'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
        }
    }
}