Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/flash/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在PHP中创建嵌套类?_Php - Fatal编程技术网

如何在PHP中创建嵌套类?

如何在PHP中创建嵌套类?,php,Php,我是PHP开发新手,完全不知道PHP如何处理类和继承。正如我所读到的,PHP中没有嵌套类。我来自C#,我想复制以下结构: private class GameScore { public TeamData[] teams = new TeamData[2]; public Boolean alert { get; set; } public String date { get; set; }

我是PHP开发新手,完全不知道PHP如何处理类和继承。正如我所读到的,PHP中没有嵌套类。我来自C#,我想复制以下结构:

private class GameScore {
        public TeamData[] teams =  new TeamData[2];                      
        public Boolean alert { get; set; }
        public String date { get; set; }
        public String time { get; set; }
        public class TeamData {                
            public String name { get; set; }
            public String score { get; set; }
        }
    }
class TeamData{
    public $name;
    public $score;

    public function __construct() {
        $this->name = '';
        $this->score = '';
    }
}

class GameScore{
    public $alert;
    public $date;
    public $time;

    public $team1;
    public $team2;

    function __construct(){
        $this->alert = false;
        $this->date = '';
        $this->time = '';
        $this->team1 = new TeamData();
        $this->team2 = new TeamData();
    }
}
每个游戏分数都应该有参加比赛的球队的名字以及他们在给定比赛中得到的分数。我希望能够以以下方式存储此数据,列出多个匹配的分数:

GameScore[] game = new GameScore[n];

game[0].alert = true;
game[0].date = "Oct. 17";
game[0].time = "15:25 EST";
game[0].teams[0].name = "Toronto Raptors";
game[0].teams[0].score = "0";
game[0].teams[1].name = "New York Knicks";
game[0].teams[1].score = "0";

...
编辑:我尝试了以下结构:

private class GameScore {
        public TeamData[] teams =  new TeamData[2];                      
        public Boolean alert { get; set; }
        public String date { get; set; }
        public String time { get; set; }
        public class TeamData {                
            public String name { get; set; }
            public String score { get; set; }
        }
    }
class TeamData{
    public $name;
    public $score;

    public function __construct() {
        $this->name = '';
        $this->score = '';
    }
}

class GameScore{
    public $alert;
    public $date;
    public $time;

    public $team1;
    public $team2;

    function __construct(){
        $this->alert = false;
        $this->date = '';
        $this->time = '';
        $this->team1 = new TeamData();
        $this->team2 = new TeamData();
    }
}
虽然这复制了用C#编写的相同结构,但它不会在
GameScore
TeamData
之间生成任何依赖关系(例如,如果我想在C#上访问此数据类型,我需要实例化
GameScore.TeamData
,而在使用上述代码的PHP上则不是这样)


实现这一点的正确方法是什么?

熟悉
php
中的
traits


Php不支持嵌套类 如果TeamData不需要访问GameScore的成员,您可以将它们作为两个独立的类编写,情况似乎就是这样。
php没有内置的get/set关键字,所以getter和setter需要手动编写。

为什么不扩展GameScore类?类GameScore{public$teams;public$alert;public$date;public$time;}类TeamData{public$name;public$score;}@Maximus2012也许我做错了什么,我将用我尝试过的一些代码更新我的问题。这里不会有一个单独的TeamData对象,显然名称和分数将是您创建的GameScore对象的元素。这就是扩展类的工作原理。如果您只需要来自TeamData类而不需要来自GameScore类的内容,那么也许您应该创建一个TeamData类的对象。现在您讨论了依赖项,您希望如何管理它们?你不能像在C中那样创建和使用它们。相反,使用getter/setter或将其作为构造函数参数插入:_uu(TeamData$team1,TeamData$team2)。或者使用DI容器,有很多种方法。关于这一点,我读到了一些神奇的方法,但我也读到使用这些方法或任何getter和setter对于php来说都不是一个好的实践,这是错误的吗?此外,每一场比赛的分数都需要参赛球队的名字以及这些球队在那场比赛中获得的分数,这就是为什么他们作为一个内部类别相联系的原因。因此,通过这些特点,你可以实现视频游戏的组件模式。你能详细说明一下吗?我尝试使用traits,但在这个过程中我发现了一个确切的问题: