我对OOP合情合理,而且我不能完全理解组合和__autoload()
应该如何协同工作。我目前正在尝试构建的是一个类,它将具有许多其他类的属性。为了给出一些背景知识,这个特殊的应用程序支持同时开发的独立角色扮演游戏。
基本文件结构如下:
本地主机/项目/
本地主机/项目/ lib中
本地主机/项目/ LIB /类
等等。在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
}
}
?>
当我运行时,我从Character获得Parse error: syntax error, unexpected 'new' (T_NEW) in...
,但我不明白为什么。到拨打$char
的电话时,common.php
已加载,这意味着__autoload()
可用,实际上它找到了Character
。
我的问题:
a)为什么__autoload()
在一个类中不起作用,并且
b)如何在面向对象的PHP中完成组合假设?
非常感谢!
答案 0 :(得分:4)
该语法错误与自动加载无关。您根本无法在代码中创建该类(这不是Java)。您只能将标量的静态值指定为属性的初始值。
如果您希望使用其他类初始化该属性,请在__construct()
函数内分配。
关于组成:使用依赖性注射。允许外部世界传递要使用的类,而不是在该类中创建它。