Hallo,


Het volgende heb ik aan de hand.
Ik probeer een class statisch te gebruiken in een andere class.
Nu krijg ik een error dat de class niet gevonden word.
Uncaught Error: Class 'app\controllers\Application' not found in /Applications/MAMP/htdocs/website/app/controllers/SiteController.php

<?php

namespace app\controllers;

class SiteController
{
	public function contact()
	{
		return Application::$app->render('contact');
	}

}

?>



<?php

namespace app\core;

class Application
{
        public static Application $app;

        public function __construct()
        {
                self::$app = $this;
        }

        public function render($view){

        }
}

?>



Zodra ik de namespace van SiteController verander naar app\core en de file in de core directory zet word deze wel gevonden.

Er gaat dus iets mis met de autoloader vermoed ik. Iemand een idee hoe ik dit kan oplossen?

toevoeging

<?php
return app\core\Application::class;
?>

Geeft resultaat app\controllers\app\core\Application
https://www.php.net/manual/en/language.namespaces.basics.php

Oplossing 1) Gebruik de volledige naam (incl. namespace) voor de Application class. Anders zoekt PHP 'm in de huidige namespace (en daar vindt ie 'm niet = je foutmelding):
<?php

namespace app\controllers;

class SiteController
{
    public function contact()
    {
        return \app\core\Application::$app->render('contact');
//             ^^^^^^^^^^
    }

}

?>


Oplossing 2) Maak een alias aan voor Application (verwijs naar de volledige naam - incl. namespace; als je geen expliciet alias aangeeft is het laatste deel het alias = Application = je code werkt zoals bedoeld):

<?php

namespace app\controllers;

use app\core\Application;
//^^^^^^^^^^^^^^^^^^^^^^^

class SiteController
{
    public function contact()
    {
        return Application::$app->render('contact');
    }

}

?>
Hi Rob,


Thanks voor het antwoord, ik ben voor optie 2 gegaan.
Deze optie had ik zelf ook al geprobeerd maar had mij toen vergist en had de use boven de namespace gezet.
Door het antwoord dat jij gaf ging het lampje branden :)

Gr. Jop

Reageren