Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP5.3:使用_autoload()在另一个类中实例化一个类_Php_Oop_Autoload_Composition - Fatal编程技术网

PHP5.3:使用_autoload()在另一个类中实例化一个类

PHP5.3:使用_autoload()在另一个类中实例化一个类,php,oop,autoload,composition,Php,Oop,Autoload,Composition,我对OOP相当熟悉,而且我不能完全直觉地理解composition和\uu autoload()应该如何协同工作。我目前试图构建的是一个类,它的属性将包含相当多的其他类。为了提供一些上下文,这个特定的应用程序支持一个正在同时开发的独立角色扮演游戏 基本文件结构如下: 本地主机/项目/ index.php 解放党/ localhost/project/lib common.php 阶级/ localhost/project/lib/class Character.php SkillSet

我对OOP相当熟悉,而且我不能完全直觉地理解composition和
\uu autoload()
应该如何协同工作。我目前试图构建的是一个类,它的属性将包含相当多的其他类。为了提供一些上下文,这个特定的应用程序支持一个正在同时开发的独立角色扮演游戏

基本文件结构如下:

本地主机/项目/

  • index.php
  • 解放党/
localhost/project/lib

  • common.php
  • 阶级/
localhost/project/lib/class

  • Character.php
  • SkillSet.php
  • Equipment.php
等等。在
index.php
中,我有:

<?php 
require_once("lib/common.php"); 
// ...bunch of bootstrapping and what not...
$char = new Character;
?>
最后,主类,
Character
,打开时显示:

<?php

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


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

当我运行这个程序时,我从Character中得到了
Parse error:syntax error,在…
中出现了意外的“new”(T_new),但我不清楚原因。调用assign
$char
时,
common.php
已经加载,这意味着
\uuuu autoload()
可用,并且它确实找到了
字符

我的问题: a) 为什么
\uuu autoload()
不能在类中工作,以及 b) 在面向对象的PHP中应该如何进行组合


非常感谢您的帮助

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

如果希望用另一个类初始化该属性,请在
\uu construct()
函数中指定它


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

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

如果希望用另一个类初始化该属性,请在
\uu construct()
函数中指定它

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

a)谢谢,我没有意识到我不能这样做,re:assign和b)只是为了确保我遵循,你建议我在中实例化一个
SkillSet
类,比如说,
index.php
,然后将它传递给
Character
,是这样吗?没有办法从类内部
\uuu autoload()
?NVM;
common.php
中的
\uuu autoload()
只要我按照您的建议在构造函数中完成赋值,就可以正常工作,非常感谢!a) 谢谢,我没有意识到我不能这样做:赋值和b)只是为了确保我遵循,你建议我在中实例化一个
SkillSet
类,比如说,
index.php
,然后将它传递给
Character
,对吗?没有办法从类内部
\uuu autoload()
?NVM;
common.php
中的
\uuu autoload()
只要我按照您的建议在构造函数中完成赋值,就可以正常工作,非常感谢!
<?php

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


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