Goede avond,


Ik ben begonnen met OOP te programmeren en het project word steeds groter wat mij bij autoloader brengt.
Waar ik tegen aan loop is werken met namespace en hoop dat iemand mij wat wegwijs hierin kan bieden.

De autoloader

<?php
spl_autoload_register( function( $class ) {

	$folder = 'include/';
	$prefix = 'class.';
	$ext	= '.php';
	
	$fullPath = $folder . $prefix . $class . $ext;
	
	if( !file_exists( $fullPath ) ){
		print 'Class file not found!';
		return false;
	}
	
	require_once $fullPath;
});
?>


De autoloader word vereist in de index file van de site.

Dan heb ik in de root folder een map include hierin staan vervolgens mappen deze groeperen diversen classes van php.
Als voorbeeld heb ik een map Person de structuur is dan root->include->Person.

In de map Person bevind zicht de file class.person.php.

<?php
namespace Person;

class Person{
	function __construct(){
		print 'autoload works';
	}
}
?>


In de index file staat bijvoorbeeld het volgende


<?php
require 'autoload.php';
//gebruik backslash voor namespace
$pers = new Person\Person();
?>


Maar krijg nu de foutmelding terug file not found.
Heet het bestand class.person.php met een kleine letter of class.Person.php met een hoofdletter?

Ik zou het bestand voor een class Person gewoon Person.php noemen en bestandsnamen voor speciale bestandstypen beperken tot AbstractPerson.php voor een abstract class, PersonInterface.php voor een interface en bijvoorbeeld Person.phtml voor een HTML-template met PHP-output.

Bedenk tot slot of een class Person eigenlijk wel in een aparte namespace Person hoort...
Hi Ward,


De bestandsnaam is geheel lowercase.

Het bovenstaande is een voorbeeld ;-) om te laten zien hoe ik het georganiseerd heb.

[size=xsmall]Toevoeging op 27/12/2020 20:14:00:[/size]

Ik heb het opgelost door in de autoload code een str_replace the gebruiken

<?php
$fullPath = $folder . str_replace( "\\", '/', $class ) . $prefix . $ext;
?>


De output van $fullPath was include/class.Person\Person.php

Reageren