如何在 PHP 中使用内部类?

2022-08-30 14:19:13

我来自Java背景,我想在php中使用内部类。但是,每次我放置内部类时,我都会收到语法错误。这在 PHP 中是可能的吗?另外,如何引用外部类?我是否有权访问其所有数据成员?

<?php

class OuterClass {
    var $x = 15;
    function __construct() {

    }

    class InnerClass {                  // error when InnerClass is static
        function __construct() {        // error when InnerClass is static
            echo $x;
        }
    }
}

?>

这用于特定纸牌游戏的 MoveClass(如进行移动)。我认为将这些类放在一起是很好的设计,因为它们分开是没有意义的。此外,MoveClass 需要了解 Game 类的某些数据成员。为什么不让它成为一个功能呢?它实在是太大了。

编辑:

嵌套类呢?据我所知,这些必须是静态的吗?O_o


答案 1

PHP 不允许使用内部类。如果您希望访问父类中的所有数据成员,我建议您使用继承。

一个可能的替代方案:

class OuterClass {
    var $x = 15;
    function __construct() {

    }
}
class ChildClass extends OuterClass {
    function __construct() {
        parent::__construct();
    }
}

您可以通过引用类本身来从父类中获取方法;在 PHP 中,您可以使用关键字执行此操作。因此,在类的上下文中引用方法,而不是我们使用的对象,而不是 。parent::->


答案 2

在 PHP 5.4 或更高版本中,您可以使用 PHP 特征,这些特征更适合多重继承,但可能适合您的需求。从 PHP 文档中:

Trait 类似于类,但仅用于以细粒度和一致的方式对功能进行分组。无法自行实例化 Trait。它是传统继承的补充,可以水平组合行为;也就是说,在不需要继承的情况下应用类成员。

http://php.net/manual/en/language.oop5.traits.php


推荐