对象是否可以包含同一类型的另一个对象?

时间:2012-11-19 22:38:58

标签: php

我阅读了其他语言的几个问题和答案,但没有看到任何专门针对PHP的问题。

以下内容在PHP中是否有效?

class foo 
{
    // constructor, etc..

    public function bar()
    {
        $newFoo = new foo();
        // do something
    }
}

5 个答案:

答案 0 :(得分:1)

是的,这是有效的,只要你不在构造函数中创建相同类型的对象。

答案 1 :(得分:1)

是的,它会有效。您可以创建嵌套的对象集。 (虽然在构造函数中执行它会导致无限递归!)

额外!您甚至可以将对象链接到自身!

$this->myself = $this;

它会链接到同一个对象。

答案 2 :(得分:1)

没有什么可以阻止它。

答案 3 :(得分:1)

简短回答:是的,它有效!

您可以在PHP代码的几乎任何位置实例化对象。类内部方法没有什么不同,但如果它是一个不同的类,你必须确保首先包含你的类文件,如

<?php

    require_once './foo.class.php';

    class bar{
        //class stuff
        public doThingsWithFoo(){
            $foo = new foo();
        }
    }
?>

在您的特定情况下,您似乎在搜索$this关键字。从手册:

  

当从对象上下文中调用方法时,伪变量$ this可用。 $ this是对调用对象的引用(通常是方法所属的对象,但如果从辅助对象的上下文中静态调用该方法,则可能是另一个对象)。

在你的例子中:

class foo 
{
    // constructor, etc..

    public function bar()
    {
        $this->useAMethodFromThisClass();
        // do something
    }
}

但是在同一个类的方法中使用同一个对象的另一个实例时,没有任何事情(除了常识),就像你在做的那样:

class foo 
{
    // constructor, etc..

    public function bar()
    {
        $newFoo = new foo();
        // do something with this instance of foo that you cannot do using $this
    }
}

我希望它有所帮助。干杯

答案 4 :(得分:0)

知道PHP中某些内容是否有效的最佳方法是在头文件中使用此函数:

<?php
error_reporting(E_ALL|E_NOTICE);
?>

即使是PHP也会报告失败,例如不使用“isset()”。


其他做法:

  • 始终使用$_GET$_POST代替global

  • 请勿使用此项:$_GET["test"]这是最好的$_GET['test']

  • 请务必阅读PHP文档,了解该功能是否正常 已弃用(doc:http://www.php.net/manual

Note:你的“构造函数”是“有效的”。