classes automatisch laden wanneer nodig dus geen AutoLoader of toch wel?

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Pagina: 1 2 volgende »

Reshad F

Reshad F

28/06/2012 10:26:56
Quote Anchor link
Holla,

ik heb een vraag naast het feit dat ik met frameworks bezig ben om OOP te leren ben ik ook bezig met eigen classes te maken om het OOP denken onder de knie te krijgen en nu kwam ik ergens niet uit

stel ik wil classes gebruiken maar hoe zorg ik ervoor dat deze geladen worden als ik ze nodig heb?

moet ik hier een autoloader voor gebruiken of automatisch laden met zoietss

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php

$this
->load->lib('hier class name');

?>


en moet hier ook een class voor gemaakt worden dan?
 
PHP hulp

PHP hulp

10/01/2025 22:18:31
 
John Cena

John Cena

28/06/2012 10:38:31
Quote Anchor link
Je kunt beide gebruiken, kijk anders even naar de Zend Autoloader, weet je ook meteen hoe dat eruit ziet.
 
Reshad F

Reshad F

28/06/2012 10:40:20
Quote Anchor link
wat is handiger in dit geval?

want ik wil bijv een class niet altijd gebruiken ( bijv mail class ofzo ) dan wil ik hem alleen laden wanneer ik dat wil dan gebruik ik dus bovenstaande code maar moet hier ook een class voor gemaakt worden of is dit een ingebakken php code?
 
John Cena

John Cena

28/06/2012 10:43:33
Quote Anchor link
Dan roep je hem toch pas aan als je een mail wilt sturen?

Je moet onderscheid maken tussen wat je altijd wilt gebruiken en wat je soms wilt gebruiken.

Altijd gaat in de autoloader, de rest haal je op als je het nodig bent :)
 
Reshad F

Reshad F

28/06/2012 10:50:06
Quote Anchor link
ja dat snap ik.. maar het ging meer om of ik voor dit stukje ook een class moet maken.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php

$this
->load->lib('hier class name');

?>


of dat deze een php functie is die je zomaar kan aanroepen.


Toevoeging op 28/06/2012 11:30:22:

edit: ik heb even als autoloader dit gemaakt.. maar ik krijg een error waar ik niet echt uitkom

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
18
<?php
function __autoload($className) {
        $base = dirname(__FILE__);
        $path = explode('_', $className);

        $class = strtolower(implode('/',$path));

        $file = $base . "/" . $class;      

        if (file_exists($file)) {
            require $file;      
        }

        else {
            error_log('Class "' . $className . '" could not be autoloaded');
            throw new Exception('Class "' . $className . '" could not be autoloaded from: '.$file);
        }
    }

?>


deze error is als volgt:

Fatal error: Uncaught exception 'Exception' with message 'Class "loginform" could not be autoloaded from: /Applications/MAMP/htdocs/library/loginform' in ...

dus hij kan hem niet laden. de manier waarop ik het op probeer te halen is.

$login = new loginform();
 
John Cena

John Cena

28/06/2012 11:36:39
Quote Anchor link
include je de pagina ook?
 
Reshad F

Reshad F

28/06/2012 11:40:19
Quote Anchor link
nee dat niet. maar dat zou toch niet hoeven? want ik zie in de error wel de juiste url

/Applications/MAMP/htdocs/library/loginform
 
John Cena

John Cena

28/06/2012 11:45:04
Quote Anchor link
loginform.php?
 
Reshad F

Reshad F

28/06/2012 12:02:25
Quote Anchor link
ahh ja dat mis ik.. ik heb er dit van gemaakt

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?php $file = $base . "/" . $class . '.php'; ?>


maar dan krijg ik Fatal error: Class 'lib_loginform' not found in /Applications/MAMP/htdocs/library/index.php on line 24
 
John Cena

John Cena

28/06/2012 12:07:52
Quote Anchor link
Is die class wel in index.php?
 
Erwin H

Erwin H

28/06/2012 12:11:44
Quote Anchor link
Waar staat je index.php?
Wat is je root?
Wat is het volledige pad naar de classes die je probeert te laden?
 
Reshad F

Reshad F

28/06/2012 12:48:49
Quote Anchor link
het ziet er zo uit

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
                       +------------+
                       | index.php  |
          +------------|            |
          |            | lib        |
          |  library   |            |
          +------------+------------+
                       |            |
                       | classes    |
                       |            |
                       +------------+


waarbij de classes in lib zitten.
Gewijzigd op 28/06/2012 12:49:13 door Reshad F
 
Erwin H

Erwin H

28/06/2012 13:11:08
Quote Anchor link
Nu niet echt een duidelijk antwoord op de vragen....


Dan moet je dus blijkbaar nog die lib opnemen in je pad, want dat zie ik nergens terugkomen.
 
Reshad F

Reshad F

28/06/2012 13:22:36
Quote Anchor link
nee dat pakt hij er al in want als ik lib er apart in zet krijg ik de url op deze manier

/Applications/MAMP/htdocs/library/lib/loginform/lib/.php

de echte pad moet zo zijn

/Applications/MAMP/htdocs/library/lib/loginform.php

en deze krijg ik ook want als ik lib er apart inzet krijg ik een foutmelding. en anders niet.


even voor de duidelijkheid: root:index.php en lib(folder)
lib(folder): class.php, class2.php etc etc

het probleem is dus dat hij van dit

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
$car
= new lib_loginform();
?>


de class moet pakken maar hij denkt dat de class lib_loginform heet wat dus niet zo is
Gewijzigd op 28/06/2012 13:23:59 door Reshad F
 
Erwin H

Erwin H

28/06/2012 13:26:17
Quote Anchor link
Zo heet de class dus wel. Als de class loginform heeft dan moet je doen:
$car = new loginform();
 
Reshad F

Reshad F

28/06/2012 14:33:10
Quote Anchor link
hmm ja maar dan krijg ik..

Fatal error: Class 'loginform' not found in /Applications/MAMP/htdocs/library/index.php on line 24

hieronder mijn volledige code.

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
18
19
20
21
22
23
24
25
26
<?php
    ini_set('display_errors', 1);
    error_reporting(E_ALL|E_STRICT);


    function
__autoload($className) {
        $base = dirname(__FILE__);
        $path = explode('_', $className);

        $class = strtolower(implode('/',$path));

        $file = $base . "/" . "/lib/" . $class . '.php';      

        if (file_exists($file)) {
            require $file;      
        }

        else {
            error_log('Class "' . $className . '" could not be autoloaded');
            throw new Exception('Class "' . $className . '" could not be autoloaded from: '.$file);
        }
    }



       $car = new loginform();
    
?>
 
Erwin H

Erwin H

28/06/2012 14:43:03
Quote Anchor link
Kom ik toch nog eens terug op de vragen die ik al eerder stelde en waarop je geen duidelijk antwoord heb gegeven. Als je dat wel doet, kom je er waarschijnlijk sneller uit, want het is gewoon alle paden onder elkaar zetten:
Erwin H op 28/06/2012 12:11:44:
Waar staat je index.php?
Wat is je root?
Wat is het volledige pad naar de classes die je probeert te laden?

Schrijf het gewoon eens helemaal, duidelijk en onder elkaar uit. Ga dan kijken wel relatieve pad je dus nog moet maken en hoe je dat kan construeren. Hetzij vanuit de class name, hetzij met voorgedefinieerde waardes.
 
Reshad F

Reshad F

28/06/2012 15:06:25
Quote Anchor link
oke mijn root is de library folder, hierin zit een bestand index.php en een andere folder genaamd lib in deze lib folder zitten mijn classes die vanuit index opgevraagd kunnen worden met de loader functie

hieronder een printscreen. (let even niet op de loginform.php die in de library folder staat dat was als testje

http://cl.ly/371m2B2g2g192k473Q0T
 
Erwin H

Erwin H

28/06/2012 15:58:35
Quote Anchor link
Dus vanuit de folder waar index.php staat hoef je alleen de lib folder in om de juiste file te kunnen includen. Doe dan eens, zonder autoloader:
include 'lib/loginform.php';

Werkt het dan wel?
 
Reshad F

Reshad F

28/06/2012 16:07:39
Quote Anchor link
yep dan werkt het wel.

wat ik opmerk is: $car = new form(); pakt dan de class form in het bestandje loginform.php

maar wanneer ik de loader gebruik dan pakt hij class form in form.php ipv uit inlogform.php

dus hij verwacht dat het bestandje ook zo heet.
Gewijzigd op 28/06/2012 16:08:07 door Reshad F
 
Erwin H

Erwin H

28/06/2012 16:25:17
Quote Anchor link
Dat laatste vind ik een beetje rare opmerking van je. Jij schrijft die autoloader, dus jij bepaalt wat er geladen wordt. Als je het zo schrijft dat het bestand geladen wordt dat een gelijke naam heeft als de class, dan wordt die geladen en niets anders. Dus 'hij verwacht dat het bestandje zo heet' is niet waar. Jij bepaalt dat het bestandje zo moet heten.

Maar goed, als een directe include wel werkt, dan wordt het tijd om gewoon eens te controleren wat je autoloader nu wel en niet laadt. Echo het eens voor de include zou ik zeggen, zie je meteen waar het mis gaat.
 

Pagina: 1 2 volgende »



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.