PHP 5.3:使用__autoload()在另一个类中实例化一个类

时间:2013-07-28 00:49:18

标签: php oop autoload composition

我对OOP合情合理,而且我不能完全理解组合和__autoload()应该如何协同工作。我目前正在尝试构建的是一个类,它将具有许多其他类的属性。为了给出一些背景知识,这个特殊的应用程序支持同时开发的独立角色扮演游戏。

基本文件结构如下:

本地主机/项目/

  • 的index.php
  • LIB /

本地主机/项目/ lib中

  • 的common.php
  • 类/

本地主机/项目/ LIB /类

  • Character.php
  • SkillSet.php
  • Equipment.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
    }
}
?>

当我运行时,我从Character获得Parse error: syntax error, unexpected 'new' (T_NEW) in...,但我不明白为什么。到拨打$char的电话时,common.php已加载,这意味着__autoload()可用,实际上它找到了Character

我的问题: a)为什么__autoload()在一个类中不起作用,并且 b)如何在面向对象的PHP中完成组合假设

非常感谢!

1 个答案:

答案 0 :(得分:4)

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

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

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