如何在PHP中使用内部类?

时间:2010-12-04 03:32:26

标签: php class inner-classes

我来自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

4 个答案:

答案 0 :(得分:20)

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

可能的替代方案:

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

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

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

答案 1 :(得分:5)

在PHP 5.4或更高版本中,您可以使用专为多重继承而设计的PHP Traits,但可能适合您的需要。从PHP文档:

  

特质与类相似,但仅用于分组   功能细化和一致的方式。这不可能   自己实例化Trait。它是传统的补充   继承并实现行为的横向组合;那是,   类成员的应用程序,无需继承。

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

答案 2 :(得分:1)

您可能希望使用stdClass。以下是关于它的问题:What is stdClass in PHP?

答案 3 :(得分:0)

你不能像这样嵌套类。

查看the manual的“扩展”部分。