1

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

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

class foo 
{
    // constructor, etc..

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

5 回答 5

1

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

于 2012-11-19T22:42:30.500 回答
1

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

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

$this->myself = $this;

它会链接到同一个对象。

于 2012-11-19T22:42:59.487 回答
1

没有什么可以阻止它。

于 2012-11-19T22:44:31.500 回答
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
    }
}

我希望它有所帮助。干杯

于 2012-11-19T22:47:16.807 回答
0

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

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

甚至PHP也会报错,比如没有使用“isset()”。


其他做法:

  • 始终使用$_GET,$_POST而不是global

  • 不要使用这个:$_GET["test"]这是最好的$_GET['test']

  • 请务必阅读 PHP 文档以查看该函数是否已弃用(文档:http ://www.php.net/manual )

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

于 2012-11-19T23:01:25.940 回答