Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it L'avatar di P4n1c
    Registrato dal
    Feb 2008
    Messaggi
    116

    Dubbio __autoload con 2 inzializzazione

    Codice PHP:
    <?php

    class miaclasse
    {

    function 
    __autoload($a)
    {
    include 
    $a;
    }

    function 
    __construct()
    {

    $b=new altraclasse();

    }

    }

    $c=new miaclasse();
    ?>
    anche se magari non serve necessariamente... c'è un metodo per isolare la classe __autoload e non permetterle di funzionare pure fuori dalla classe in cui si trova ?

  2. #2
    Utente di HTML.it L'avatar di Razorblade
    Registrato dal
    Feb 2002
    Messaggi
    1,308
    Credo che qualcuno te l'abbia già chiesto, sei sicuro di aver capito a cosa serve __autoload?
    __autoload include il file della classe richiesta dallo script, quindi solitamente nel corpo di questa funzione dovresti mettere un include() o un require() con il nome della classe richiesta che ti arriva ad argomento ( quindi il file classe dovresti chiamarlo, per convenzione, esattamente come la classe, come si usa anche in altri linguaggi ).
    Inoltre non capisco l'utilità e non so nemmeno se sia corretto utilizzare un metodo chiamato __autoload.

    Puoi vedere qui http://it2.php.net/__autoload numerosi esempi sull'utilizzo.

    Se vuoi creare una classe che ti gestisca l'autoload allora devi leggere qui
    http://it2.php.net/manual/it/functio...d-register.php

    Ciao

  3. #3
    Utente di HTML.it L'avatar di P4n1c
    Registrato dal
    Feb 2008
    Messaggi
    116
    Guarda ti ringrazio per avermelo chiesto ma io sono sicuro di averlo capito ( giusto mi sono scordato $a . '.php'; ) ma il mio dubbio ( molto infondato ) e che invocando new altraclasse(); lui mi includesse altraclasse.php e dopo inizializzando la classe miaclasse, autoload rifacesse un'altra inclusione su miaclasse.php... spero di essermi spiegato al meglio. Comunque ho fatto una cosa che dovrei fare più spesso ho provato praticamente e ho notato che il mio dubbio era infondato e che il metodo __autoload lo devo esperre fuori dalla classe.

    Ora però la domanda che mi viene da farmi è un'altra... ci sarebbe un modo per inserire la funzione __autoload all'interno della classe ? che se no mi pare "poco pulito" il codice...

    es :

    <?php

    class classe
    {

    const EXT = '.php';

    function __autoload($a)
    {
    include $a . EXT;
    }

    function __construct()
    {
    $ini = new nomepaginaeclasse();
    }

    }

    ......

  4. #4
    ma hai provato il codice postato nel 1° post? perchè a rigor di logica non fa niente di che!
    la funzione __autoload funzia fuori dalle classi (secondo la mia ignoranza, se mi sbaglio correggetemi) e serve per caricare automaticamente le classi senza fare 40 bilioni di include

    esempio:

    Codice PHP:
    <?php

       
    function __autoload($class_name){require_once $class_name.".php";}

       
    $m = new MyFirstClass();
       
    $s = new MySecondClass();
       ....
       
    $d = new MyOneBillionEtcClass();

    ?>
    invece (secondo me, quindi potrei sbagliare, non prendete tutto quello che dico per oro colato, tralaltro sono strinato ) dentro una classe non ha la medesima funzione, tante vero che se hai provato ad eseguire il primo script che hai postato, da errore fatale in quanto non trova la classe "altraclasse" anche se messa nella cartella dove la __autoload va a prendere le classi non funziona, ergo non serve in quel caso (a meno che non richiami la funzione con classe::__autoload(MiaClasse); <= a che pro?!?)

    Ma tanto per togliermi un dubbio a che scopo lo hai inserita nella classe?
    e rispondendo alla tua domanda con quello script non caricherà la classe "altraclasse" ad ogni richiamo della classe "classe"
    Perchè essere stupidi non è una menomazione ma un diritto di tutti!!!

  5. #5
    Utente di HTML.it L'avatar di Razorblade
    Registrato dal
    Feb 2002
    Messaggi
    1,308
    Si è possibile, ma non utilizzando direttamente autoload, ma una funzione creata apposta che ne emuli la funzionalità. Se andavi a vedere qui http://it2.php.net/manual/it/functio...d-register.php la prima 'User Contributed Notes' in ordine di visualizzazione fa quello che dici, la ricopio qui giusto nel caso qualcuno inserisse altro:

    Codice PHP:
    <?php

    // code to set include_path...

    class AutoloadException extends Exception { }

    class 
    AutoloadClass {

        public static function 
    autoload($sClassName) {

            
    $bIsExisting = @include_once($sClassName '.class.php');
            if (
    $bIsExisting) return;

            eval(
    "class $sClassName {
                function __construct() {
                    throw new AutoloadException('Class 
    $sClassName not found');
                }

                static function __callstatic(\$m, \$args) {
                    throw new AutoloadException('Class 
    $sClassName not found');
                }
            }"
    );

        }

    }

    spl_autoload_register(array('AutoloadClass''autoload'));

    ?>
    Inoltre avevo già notato che qualcuno sconsiglia l'uso di __autoload, in quanto protrebbero presentarsi dei conflitti in alcune situazioni, sarebbe invece una buona idea usare spl_autoload_register('miafunzione') per gestire l'autocaricamento delle classi in modo più personalizzato.
    Ciao

  6. #6
    Originariamente inviato da Razorblade
    Si è possibile, ma non utilizzando direttamente autoload,
    E' proprio come pensavo
    Originariamente inviato da Razorblade
    ma una funzione creata apposta che ne emuli la funzionalità. Se andavi a vedere qui http://it2.php.net/manual/it/functio...d-register.php la prima 'User Contributed Notes' in ordine di visualizzazione fa quello che dici, la ricopio qui giusto nel caso qualcuno inserisse altro:
    Non mi è molto chiaro il funzionamento... uhmm... ci devo tornare sopra

    Originariamente inviato da Razorblade
    Inoltre avevo già notato che qualcuno sconsiglia l'uso di __autoload, in quanto protrebbero presentarsi dei conflitti in alcune situazioni,
    ad esempio?
    Perchè essere stupidi non è una menomazione ma un diritto di tutti!!!

  7. #7
    Utente di HTML.it L'avatar di Razorblade
    Registrato dal
    Feb 2002
    Messaggi
    1,308
    Ad esempio potresti aver bisogno di utilizzare qualche sorta di applicazione esterna dove è già impostato __autoload.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.