0

私は OOP にかなり慣れていて、合成と__autoload()がどのように連携するのかがよくわかりません。私が現在構築しようとしているのは、プロパティとして他のかなりの数のクラスを持つクラスです。いくつかのコンテキストを示すために、この特定のアプリは、同時に開発されているインディー ロールプレイング ゲームをサポートしています。

基本的なファイル構造は次のとおりです。

ローカルホスト/プロジェクト/

  • index.php
  • ライブラリ/

ローカルホスト/プロジェクト/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
    }
}
?>

これを実行するとParse error: syntax error, unexpected 'new' (T_NEW) in...Character から取得できますが、その理由は明確ではありません。assign の呼び出し$charが行われるまでに、common.phpがロードされています。つまり、__autoload()が利用可能であり、実際に が見つかりCharacterます。

私の質問:__autoload() a)がクラス内で機能しないのは なぜですか? b)オブジェクト指向 PHP で構成を行うにはどうすればよいですか?

最も感謝ヘルプ!

4

1 に答える 1