在 PHP 7.4 中使用命名空间和自动加载器

Using Namespaces and autoloader in PHP 7.4

提问人:mrJQuery 提问时间:7/24/2020 最后编辑:DharmanmrJQuery 更新时间:7/25/2020 访问量:1356

问:

我对命名空间如何与自动加载一起工作有点困惑。我目前正在尝试学习 PHP 7.4,我想学习如何为类使用命名空间和自动加载器。

我正在使用 MAMP 在 Mac OS 上工作。

这是我收到的错误消息:

警告:include_once(classes/Person/Person.class.php):无法打开流:第 4 行的 /Applications/MAMP/htdocs/includes/autoloader.inc.php 中没有此类文件或目录

我的文件结构是这样的:

- classes
  - Person
    - Person.class.php
- includes
   - autoloader.inc.php
- index.php

索引 .php:

<?php
    include 'includes/autoloader.inc.php';
?>

<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<body>
    <?php
        $person = new \classes\Person\Person('Andre', 24, 'blue');
        echo $person->getName();
    ?>
</body>
</html>

autoloader.inc.php:

<?php

spl_autoload_register(function($className) {
    include_once str_replace("\\", "/", $className) . '.class.php';
});

人.class.php

<?php

namespace classes\Person;

class Person {
    private $name;
    private $age;
    private $eyeColor;

    public function __construct($name, $age, $eyeColor) {
        $this->name = $name;
        $this->age = $age;
        $this->eyeColor = $eyeColor;
    }
}

我真的不明白为什么它不起作用。我遵循了很多教程,但没有任何效果。也许它与PHP中的配置有关?

PHP 命名空间 自动加载器 php-7.4

评论

0赞 Lawrence Cherone 7/24/2020
您需要在正确的路径前面,否则在完成所有操作后,require 将是绝对路径include_once '/classes/Person/Person.class.php'
1赞 Lawrence Cherone 7/24/2020
提示:使用 Composer
0赞 mrJQuery 7/24/2020
@LawrenceCherone我试图预置正确的路径,但都没有奏效。我会看看作曲家谢谢。也许这会有所帮助。include_once '/classes/Person/Person.class.php'include_once 'localhost:8888/classes/Person/Person.class.php'
2赞 rob006 7/25/2020
使用绝对路径:。include_once dirname(__DIR__) . '/'. str_replace("\\", "/", $className) . '.class.php';

答: 暂无答案