Zin en onzin van autoload

Status
Niet open voor verdere reacties.

kenikavanbis

Terugkerende gebruiker
Lid geworden
22 mei 2007
Berichten
2.196
Mijn stelling dat autoload voor luie programmeurs is kan hier worden verder geplaatst (zonder het doel te kwetsen)
autoload wordt vervangen door volgende

PHP:
<?php
$path = '/usr/lib/pear';
set_include_path(get_include_path() . PATH_SEPARATOR . $path);
?>

volgende wordt bij mij als autoloader als minder ervaren heeft enkel het doel garantie op te werken onder chared hosting
PHP Code:
PHP:
public static function autoLoad($path) {
         .... while() {}
 }
 
Dit is volgens mij geen echte autoloading, meer een eigen implementatie om te zorgen dat er van allerlei classes ingeladen worden.

Als ik dit engelse artikel door lees valt deze zin op:
PHP 5 introduced the magic function __autoload() which is automatically called when your code references a class or interface that hasn’t been loaded yet. This provides the runtime one last chance to load the definition before PHP fails with an error.

Dus in plaats van een hele dir uitlezen en alles maar inladen zorgt autoloading er voor dat er pas wat geïnclude wordt wanneer er een klasse wordt aangeroepen die nog niet geladen is.
 
een voorbeeldje van een probleem
https://bugs.php.net/bug.php?id=62339

php = line interpreter dus... en gemaakt in pear
zoals ik al vertelde er zijn verschillende mannieren van benaderen ook al zie je dat niet onmiddelijk.


-->aangepast
onderstaande code heeft na het zien van betere testen uitgewezen dat beter is dan oudere functies en dient enkel om objecten classes automatisch te laden indien niet requered is
PHP:
<?php
function __autoload($className) {
    $filename = $className . ".php";
    if (is_readable($filename)) {
        require_once $filename;
    }
}
<--
stel nu een site zoals facebook of google met 10 duizenden gebruikers zouden onmiddelijk merken.geheugen kan goed benut of verspillen en dit zie je gewoon.

kwestie van smaak zeker.

pgvincent (ken je drupal) dan kan ik je een klein voorbeeldje geven waar het bewijs zonder meer kan leveren met een kleine aanpassing
 
Laatst bewerkt:

Dat is geen voorbeeld van een probleem met autoloading, dat is een voorbeeld van een bugreport van twee jaar geleden, over een class met 5000 methods(!) die een trait laadde die ook in de class bestond, en die bug is opgelost.

ja ook voor deze code ben ik niet te vinden, stel je loader gaat phpexel laden swiftmailer en nog 10 ander je zou nog eens geheugen nodig hebben met weinig gebruikers

Dat zal je autoloader dus nooit doen, dat is de hoofdreden waarom autoloaders bestaan.
Als het script er zo uitziet:
PHP:
<?php
$foo = new swiftmailer();
?>
dan wordt swiftmailer geladen.

Als je code er zo uitziet:
PHP:
<?php
if (false)
{
$foo = new swiftmailer();
}
?>
dan wordt swiftmailer niet geladen. En ook als in plaats van false een andere willekeurige conditie staat die op het moment dat PHP hem uitvoert niet waar is zal swiftmailer niet geladen worden.

En dat is dus in tegenstelling tot wat jij doet; jij moet handmatig bepalen of je een class wel of niet include() en als jij wilt voorkomen dat classes niet onnodig worden geladen dan moet jij je script doorspekken met include en require statements op elke plek waar het kan gebeuren dat de class mogelijk nog niet geladen is.


pgvincent (ken je drupal) dan kan ik je een klein voorbeeldje geven waar het bewijs zonder meer kan leveren met een kleine aanpassing

Ik ben niet erg bekent met drupal, maar ik ben wel benieuwd naar hoe jij een autoloader zo ver gaat krijgen dat hij iets laad wat niet gebruikt wordt, gegeven hoe autoloaders werken...
 
Laatst bewerkt door een moderator:
Ik had u het graag uitgelegt maar dan moet u openstaan voor uitleg het stop wel hier.Ik stel voor dat u niet op mijn posts komt en ik niet op uw . Als u nog iets te zeggen hebt doen we het persoonlijk of over de telefoon , ik wil je gerust eens bellen zodat uw onstane fustratie kwijt kan.
 
Ik stel voor dat u niet op mijn posts komt en ik niet op uw.

Aangezien dit topic is aangeslingerd om de zin en onzin van autoload uit de boeken te kunnen doen vind ik het vreemd dat je nu "de handdoek in de ring gooit".

PgVincent is van mening dat jouw manier van classes includen niet dezelfde functie heeft als de autoload functie van PHP en dus inefficiënter is.

Het is erg spijtig dat je dit als modder gooien ziet terwijl ik een aardige beargumentering lees.
Juist dan zou ik willen weten waarom jij jouw manier beter vindt.

Als hier geen discussie gevoerd kan worden dan heeft het geen zin deze thread open te houden en zal ik hem sluiten.
 
Zoals ik zei; ik heb je script afgebrand omdat mij indirect een luie programmeur noemt terwijl je zelf niet bleek te begrijpen hoe autoload werkt en je eigen code rammelde langs alle kanten.

Ik had u het graag uitgelegt maar dan moet u openstaan voor uitleg het stop wel hier.

Kom maar op met die uitleg, ik ben razend benieuwd!


Ik stel voor dat u niet op mijn posts komt en ik niet op uw.

Ik kijk nooit naar wie een topic heeft gestart of wie erop heeft geantwoord, als er iets wordt beweerd waarvan ik zeker weet dat het niet klopt dan vertel ik dat. (net zoals in je eigen vraag over SQL injectie van eergisteren)
Als ik twijfel dan zoek ik het op om te controleren of het klopt.

En ja, ik heb dus ook jouw bewering over autoload nagezocht en ik kan niets vinden over overbodig laden. Ik schrok dus ook best wel toen je een link postte die ik niet had gevonden, maar dat bleek gelukkig een bugreport te zijn en geen argumentatie over fout gedrag van autoload.
 
Status
Niet open voor verdere reacties.

Nieuwste berichten

Terug
Bovenaan Onderaan