我可以在另一个类中实例化一个 PHP 类吗?

新手上路,请多包涵

我想知道是否允许在另一个类中创建一个类的实例。

或者,我是否必须在外部创建它,然后通过构造函数将其传入?但是我会在不知道是否需要它的情况下创建它。

示例(数据库类):

 class some{

if(.....){
include SITE_ROOT . 'applicatie/' . 'db.class.php';
$db=new db

原文由 Richard 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 546
2 个回答

您不能在另一个类中定义一个类。您应该在类之外包含具有其他类的文件。在您的情况下,这将为您提供两个顶级课程 dbsome 。现在在 some 的构造函数中,您可以决定创建一个 db 的实例。例如:

 include SITE_ROOT . 'applicatie/' . 'db.class.php';

class some {

    public function __construct() {
        if (...) {
            $this->db = new db;
        }
    }

}

原文由 Lukáš Lalinský 发布,翻译遵循 CC BY-SA 3.0 许可协议

(编辑)好的,您要完成的问题和示例令人困惑。从您的示例看来,您正试图在另一个类中定义一个类。

正确的名称是 NESTED CLASS,在 PHP 中是不可能的。因此,对于您的示例,答案是“否”。反正不在 PHP 中。其他语言将允许“嵌套类”。 Java 就是一个例子。

例如,这在 PHP 中不起作用

class outer_class{
    class inner_class{
        ...
    }
    ...
}

现在提出的问题是在另一个类中创建一个类的实例。

对此,答案是“是”,您可以在“类”中实例化一个“对象”。我们一直这样做。

 class simple_class{

    protected $instanceOfOtherClass;

    public function instanciateObject_KeepingAReferenceToIt(){
        // create an instance of OtherClass and associate it to $this->instanceOfOtherClass
        $this->instanceOfOtherClass = new OtherClass();
    }

    public function instanciateObject_Without_KeepingAReferenceToIt(){
        // create an instance of OtherClass and return it
        return new OtherClass();
    }
}

一个类甚至可以实例化自己。这就是著名的单例和许多其他 创建模式 所做的。可悲的是,有些人认为了解 依赖注入 意味着他们再也不会在方法中调用 NEW。错误的。

它有助于理解类和对象之间的区别。 是用于创建对象的可扩展程序代码模板。 对象 是指类的特定实例。

原文由 Siegfried DuDragon 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题