Composer Gives Error, "Class Not Found"
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.
Comments
-
Omar Tariq almost 2 years
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": "[email protected]" } ], "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
-
Brian Glaz over 8 yearsMaybe it's because you are missing
namespace myns;
in your child class? -
ccKep over 8 yearsWhat @BrianGlaz said, also: You shouldn't need the require_once in your child class at all - that's what the autoloader is for.
-
Omar Tariq over 8 years@BrianGlaz Yes, that's correct. It resolved my problem. Thanks for quick response :-)
-
Omar Tariq over 8 years@ccKep That's great. I really didn't know that.
-
-
LatentDenis over 7 yearsgreat answer! Would you be able to help me on my question: stackoverflow.com/questions/39533795/…