php autoloader en namespace
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
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?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;
});
?>
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.
Code (php)
In de index file staat bijvoorbeeld het volgende
Code (php)
1
2
3
4
5
2
3
4
5
<?php
require 'autoload.php';
//gebruik backslash voor namespace
$pers = new Person\Person();
?>
require 'autoload.php';
//gebruik backslash voor namespace
$pers = new Person\Person();
?>
Maar krijg nu de foutmelding terug file not found.
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...
Gewijzigd op 27/12/2020 18:13:22 door Ward van der Put
De bestandsnaam is geheel lowercase.
Het bovenstaande is een voorbeeld ;-) om te laten zien hoe ik het georganiseerd heb.
Toevoeging op 27/12/2020 20:14:00:
Ik heb het opgelost door in de autoload code een str_replace the gebruiken
De output van $fullPath was include/class.Person\Person.php