2013-07-28 133 views
0

我有理由绿色OOP里面,我也不太忒组成和__autoload()如何都应该共同努力。我目前正在试图建立的是一个类,因为它的属性有很多其他的类。为了给出一些上下文,这个特定的应用程序支持正在同时开发的独立角色扮演游戏。PHP 5.3:使用__autoload()来实例化一个类另一个类

基本文件结构变为:

本地主机/项目/

  • 的index.php
  • 的lib/

本地主机/项目/ lib目录

  • 常见.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 
    } 
} 
?> 

当我跑,我得到Parse error: syntax error, unexpected 'new' (T_NEW) in...从性格,但我不清楚为什么。通过分配$char呼叫提出时,common.php已经加载,这意味着__autoload()是可用的,而且确实发现Character

我的问题: 一)为什么__autoload()没有一个类的内部工作, 二)如何组成应该在面向对象的PHP做什么?

帮助非常感激!

回答

4

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

如果您想要的属性与其他类进行初始化,为它分配__construct()函数内。

关于组合物:使用depencency注射。允许外部世界通过该类来使用,而不是在该类中创建它。

+0

a)谢谢,我没有意识到我无法做到这一点:分配和b)只是为了确保我遵循,你建议我实例化一个SkillSet类,比如'index .php“,然后传递给'Character',是吗?有没有办法从类里面'__autoload()'? – Jonline

+0

非易失性存储器; ''common.php'中的'__autoload()'只要我按照你的建议在构造函数中完成赋值就可以工作,非常感谢! – Jonline

相关问题