php autoloader en namespace

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Jop B

Jop B

27/12/2020 17:59:33
Quote Anchor link
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
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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;
});

?>


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)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
<?php
namespace Person;

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

?>


In de index file staat bijvoorbeeld het volgende

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
require 'autoload.php';
//gebruik backslash voor namespace
$pers = new Person\Person();
?>


Maar krijg nu de foutmelding terug file not found.
 
PHP hulp

PHP hulp

26/10/2021 23:50:02
 
Ward van der Put
Moderator

Ward van der Put

27/12/2020 18:12:37
Quote Anchor link
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...
Gewijzigd op 27/12/2020 18:13:22 door Ward van der Put
 
Jop B

Jop B

27/12/2020 18:42:02
Quote Anchor link
Hi Ward,


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
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
$fullPath
= $folder . str_replace( "\\", '/', $class ) . $prefix . $ext;
?>


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



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.