0

使用spl_autoload_register,可以自动加载类。让我们举一个使用两个文件的简单示例:

索引.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/objects.php”而不是“kitchen/oven.php”。

谢谢。

4

1 回答 1

1

我能想到的唯一方法是将所有 PHP 文件包含在spl-autoload-register方法中的命名空间目录中。您的自动加载方法只会运行一次,但它可能会加载比您预期和/或需要的更多的内容。

我相信每个文件只有一个类并且文件名共享类的名称是一种很好的做法。是的,您有更多文件,但它简化了重构并使您的文件结构更易于其他开发人员使用。

于 2013-02-14T17:46:09.747 回答