使用父级和子级命名空间的类自动加载

时间:2013-11-07 12:36:22

标签: php namespaces autoload

我读了几篇关于在php中使用命名空间的文章,但我还没有得到它。我有3个文件:

script.php和dog.php位于相同的根文件夹中,abstr。 class animals.php位于cls文件夹中,dog延伸动物。

来源: cls/Animals.php:

namespace cls;
abstract class Animals { .. }

Dog.php(没有命名空间,因为它位于根文件夹中):

 class Dog extends Animals {...}

script.php

function __autoload($cls){
     $file = str_replace('\\',DIRECTORY_SEPARATOR,$cls).".php";
    if(file_exists($file)){
        require_once $file;
    } else {
        throw new Exception("File not found: ".$file);
    }
}

$dog = new Dog("German Shepard");

但是我为动物类获得Not found exception$file只是Animals.php没有命名空间......

  1. 有人能告诉我如何获取命名空间并将其包含在__autoload函数的路径中吗?

  2. 或者为父母和孩子使用相同的命名空间是否更好?

  3. 正如我所理解的那样,名称空间=文件位置?

1 个答案:

答案 0 :(得分:0)

如果Dog不在'cls'命名空间中,则必须为Animals类编写完整的限定名称:

class Dog extends \cls\Animals { ... }