如何在PHP中使用内部类?

Lin*_*ndz 32 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;
        }
    }
}

?>
Run Code Online (Sandbox Code Playgroud)

这用于特定纸牌游戏的MoveClass(如在移动中).我认为将这些课程放在一起是一件很好的设计,因为它们没有任何区别.此外,MoveClass需要了解Game类的一些数据成员.为什么不把它变成一个功能呢?它太大了.

编辑:

嵌套类怎么样?据我所知,那些必须是静态的?O_O

Rus*_*ias 20

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

可能的替代方案:

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

    }
}
class ChildClass extends OuterClass {
    function __construct() {
        parent::__construct();
    }
}
Run Code Online (Sandbox Code Playgroud)

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

  • 我看到......但是继承对我正在做的事情没有意义,它不会真正遵循"是一个"规则.我可以传入必要的成员或外部类,也可以保存对外部类的引用.谢谢回复! (7认同)

小智 5

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

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

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


sim*_*aun 0

你不能像这样嵌套类。

查看手册的“扩展”部分。