我对 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 时$char
,common.php
已经加载,这意味着__autoload()
可用,并且确实找到了Character
.
我的问题:
a)为什么__autoload()
在类中不起作用,以及 b)在面向对象的 PHP 中应该如何完成组合?
帮助最感激!