0

ではspl_autoload_register、クラスを自動的にロードできます。2 つのファイルを使用した簡単な例を見てみましょう。

index.php

<?php
    spl_autoload_extensions (".php");
    spl_autoload_register ();

    $class = new \kitchen\oven;

    var_dump ($class);
    var_dump (new kitchen\Microwave);
    var_dump (new kitchen\Oven);
?>

キッチン/オーブン.php

<?php
    namespace kitchen {
        class Microwave {
            private $potency;

            public function get_potency () {return $this->potency;}
            public function set_potency ($potency) {$this->potency = $potency;}
        }

        class Oven {
            private $temperature;

            public function get_temperature () {return $this->temperature;}
            public function set_temperature ($temperature) {$this->temperature = $temperature;}
        }
    }
?>

実行$ php index.phpすると、次の出力が得られます。

object(kitchen\Oven)#1 (1) {
  ["temperature":"kitchen\Oven":private]=>
  NULL
}
object(kitchen\Microwave)#2 (1) {
  ["potency":"kitchen\Microwave":private]=>
  NULL
}
object(kitchen\Oven)#2 (1) {
  ["temperature":"kitchen\Oven":private]=>
  NULL
}

すべて問題ありません。私の唯一の懸念は命名法です。私は*しなければなりません*そのファイル内のクラスと同じ名前のファイルを指定します。より一般的な名前を使用できるようにする方法はありますか? 「kitchen/oven.php」の代わりに「kitchen/objects.php」を使用できればと思います。

ありがとう。

4

1 に答える 1

1

これについて私が考えることができる唯一の方法は、spl-autoload-registerメソッドの名前空間のディレクトリにあるすべてのPHPファイルを含めることです。autoloadメソッドは1回だけ実行されますが、予想および/または必要以上にロードされる可能性があります。

ファイルごとに1つのクラスだけを持ち、ファイル名にクラスの名前を共有させるのは良い習慣だと思います。はい、より多くのファイルがありますが、リファクタリングが簡素化され、他の開発者がファイル構造を操作しやすくなります。

于 2013-02-14T17:46:09.747 に答える