如何在PHP中使用内部类?
我来自Java背景,我想在php中使用一个内部类。但每次我放入内部类时,都会出现语法错误。这在PHP中是可能的吗?另外,如何引用外部类?我是否可以访问其所有数据成员如何在PHP中使用内部类?,php,class,inner-classes,Php,Class,Inner Classes,我来自Java背景,我想在php中使用一个内部类。但每次我放入内部类时,都会出现语法错误。这在PHP中是可能的吗?另外,如何引用外部类?我是否可以访问其所有数据成员 <?php class OuterClass { var $x = 15; function __construct() { } class InnerClass { // error when InnerClass is static f
<?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需要了解Game类的一些数据成员。为什么不把它变成一个函数呢?它实在太大了
编辑:
嵌套类呢?据我所知,它们必须是静态的?O_O你不能那样嵌套类
查看的“扩展”部分。PHP不允许内部类。如果您希望访问父类中的所有数据成员,我建议您使用继承 一种可能的替代方案:
class OuterClass {
var $x = 15;
function __construct() {
}
}
class ChildClass extends OuterClass {
function __construct() {
parent::__construct();
}
}
通过引用父类本身,可以从父类中调用一个方法;在PHP中,您可以使用
parent
关键字执行此操作。因此,为了在类的上下文中引用方法而不是对象,我们使用了:
,而不是->
,您可能需要使用stdClass。这里有一个关于它的问题:在PHP5.4或更高版本中,您可以使用PHP特性,这些特性更多地是为多重继承而设计的,但可能适合您的需要。从PHP文档中:
一种特质类似于一个类,但只用于分组
以细粒度和一致的方式提供功能。这是不可能的
单独实例化一个特征。这是对传统文化的补充
继承并支持行为的横向组合;就是,
不需要继承的类成员的应用程序
如对的评论中所述,PHP 7中添加了此功能的PHP版本。它似乎并没有提供你想要的东西。但是,它应该为您提供类似的设计模式 以下是RFC,描述了其工作原理:
正如在另一个答案的评论中提到的,在RFC页面中搜索“嵌套”以查看外部类中嵌套的示例。我明白了……但是继承对我所做的事情没有意义,它不会真正遵循“是一个”规则。我可以传递必要的成员或外部类,或者持有外部类的引用。谢谢你的回复!遗憾的是,似乎不能像匿名函数那样使用匿名类作为值。您只能使用它来实例化对象。