Composer Gives Error, “Class Not Found”

青春壹個敷衍的年華 提交于 2019-12-02 00:26:42

问题


I'm using Windows 10. After making a folder src in the root directory I created two files in it.

Directory Structure (Before running composer install):

│
├── composer.json
├── run.php
│
└── src
     ├── childclass.php
     └── parentclass.php

Two files in the root directory:

composer.json:

{
    "name": "myvendor/mypackage",
    "description": "nothing",
    "authors": [
        {
            "name": "Omar Tariq",
            "email": "XXXXX@gmail.com"
        }
    ],
    "require": {},
    "autoload": {
        "psr-4": {
            "myns\\": "src/"
        }
    }
}

run.php:

<?php

require_once __DIR__ . '/vendor/autoload.php';

use myns\childclass as childclass;

$childclass = new childclass();
$childclass->abc();

Two files in the src folder:

childclass.php:

<?php

require_once 'parentclass.php';

use myns\parentclass as parentclass;

class childclass extends parentclass
{
    public function abc()
    {
        echo 'hello world';
    }
}

parentclass.php:

<?php

namespace myns;

abstract class parentclass
{
    abstract public function abc();
}

Directory structure after running composer install:

│
├── composer.json
├── run.php
│
├── src
│    ├── childclass.php
│    └── parentclass.php
│
└── vendor
     ├── autoload.php
     │
     └── composer
          ├── autoload_classmap.php
          ├── autoload_namespaces.php
          ├── autoload_psr4.php
          ├── autoload_real.php
          ├── ClassLoader.php
          ├── installed.json
          └── LICENSE

Now, when I run:

php run.php

I get this error:

Fatal error: Class 'myns\childclass' not found in C:\wamp...\run.php on line 7


回答1:


In composer.json you defined that for src folder you use myns namespace, so in your childclass.php you should use

namespace myns;

It's also unnecessary to add:

require_once 'parentclass.php';

or

use myns\parentclass as parentclass;

so your childclass.php should look like this:

<?php

namespace myns;

class childclass extends parentclass
{
    public function abc()
    {
        echo 'hello world';
    }
}

In addition in run.php file you might replace:

use myns\childclass as childclass;

into

use myns\childclass;

You don't need to use as if you don't want to use other name for class.

You should also consider using namespaces with capital letter (Studly caps) and the same for classes. Instead of myns use MyNs, instead of parentclass use ParentClass. You should look at PSR-1 coding standard and PSR-2 coding standard to follow best coding practises.



来源:https://stackoverflow.com/questions/33289135/composer-gives-error-class-not-found

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!