代码之家  ›  专栏  ›  技术社区  ›  bos570

使用命名空间找不到PHP类

  •  1
  • bos570  · 技术社区  · 7 年前

    我不明白为什么我的课不能上。我正在使用Composer进行PSR-4自动加载,并已成功使用它。我的课程设置如下:

    /项目
    /类
    饲料

    /工厂
    作曲家.json
    测试myfactory.php

    源/工厂/feedfactory.php

    namespace MyClasses\Feeds\Factory;
    
    interface FeedFactory
    {
        public function build($provider);
    }
    

    feeds/factory/pullfeedfactory.php

    namespace MyClasses\Feeds\Factory;
    
    use MyClasses\Feeds\Factory\FeedFactory;
    use MyClasses\Feeds\Pull\Providers\One;
    
    /**
     * Class FeedFactory
     */
    
    class PullFeedFactory implements FeedFactory
    {
        public function __construct(){}
    
        /**
         * Build provider object for factory
         * @param string $provider Type of feed provider to return
         * @return Object Provider object
         */
    
        public function build($provider) {
            switch ($provider) {
                case 'one':
                    $provider = new One();
                    break;
                default:
                    $provider = new One`();
                    break;
            }
    
            return $provider;
        }
    }
    

    项目/feeds/pull/one.php

    namespace MyClasses\Feeds\Pull\Providers;
    
    class One
    {
        public function pull() {
            echo 'Pull One';
        }
    }
    

    项目/testmyfactory.php

    require __DIR__ . '/vendor/autoload.php';
    
    use MyClasses\Feeds\Factory\PullFeedFactory;  
    
    $feed = new PullFeedFactory();
    $feed->build('one');
    $feed->pull();
    

    项目/作曲家.json

    {
        "require": {
          //Remove for example       
        },
        "config": {
            "preferred-install": "dist"
        },
        "require-dev": {
        },
        "autoload": {
            "psr-4": {
                "MyClasses\\": "./classes",
            }
        }
    }
    

    这是我一直犯的错误 Class 'MyClasses\Feeds\Factory\PullFeedFactory' not found in /var/www/html/testPullFactory.php on line xx

    我在classes目录中使用autoload还有其他的类,但是由于某些原因,这些类不能正常工作。我觉得这是显而易见的事情,但现在已经坚持了几个小时。

    更新:

    已更新以包含vendor/autoload.php文件。尽管现在不同了,但还是会出错 Class 'MyClasses\Feeds\Pull\Providers\One' not found in /var/www/html/classes/Feeds/Factory/PullFeedFactory.php

    1 回复  |  直到 7 年前
        1
  •  0
  •   Patrick Mevzek James Dean    7 年前

    在composer.json中,更改为

    "autoload": {
            "psr-4": {
                "MyClasses\\": "classes/",
            }
        }
    

    然后,执行 composer dump-autoload .