0

我对 OOP 相当熟悉,我不能完全直观地理解组合和__autoload()应该如何协同工作。我目前正在尝试构建的是一个类,它具有许多其他类的属性。为了提供一些背景信息,这个特定的应用程序支持同时开发的独立角色扮演游戏。

基本文件结构如下:

本地主机/项目/

  • 索引.php
  • 库/

本地主机/项目/库

  • 常见的.php
  • 班级/

本地主机/项目/库/类

  • 字符.php
  • 技能组.php
  • 设备.php

等等。在index.php我有:

<?php 
require_once("lib/common.php"); 
// ...bunch of bootstrapping and what not...
$char = new Character;
?>

然后在common.php

<?php
define("DS", "/");
define("SER", "localhost");
define("BASE", "project");
define("LIB", "lib");
define("CLS", "class");

function __autoload($class_name) {
    include CLS.DS.$class_name . ".php";
}

最后,主类Character, 打开:

<?php

class Character {
    // properties
    public $skills      = new SkillSet;


    public function character() {
    //init
    }
}
?>

当我运行它时,我Parse error: syntax error, unexpected 'new' (T_NEW) in...从 Character 获得,但我不清楚为什么。在调用 assign 时$charcommon.php已经加载,这意味着__autoload()可用,并且确实找到了Character.

我的问题: a)为什么__autoload()在类中不起作用,以及 b)在面向对象的 PHP 中应该如何完成组合?

帮助最感激!

4

1 回答 1

4

该语法错误与自动加载无关。此时您根本无法在代码中创建该类(这不是 Java)。您只能将标量的静态值分配为属性的初始值。

如果您希望使用另一个类初始化该属性,请在__construct()函数内分配它。

关于组成:使用依赖注入。允许外部世界传递要使用的类,而不是在该类中创建它。

于 2013-07-28T00:52:04.247 回答