Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    _autoload : non ho ben capito come funziona

    Ciao a tutti!

    Supponiamo di avere:

    index.php
    cartella1/myClass1.php
    cartella1/myClass1b.php
    cartella2/myClass2.php

    la funzione _autoload dovrebbe essere:
    codice:
    function __autoload($class_name) {
    
    	        $main = "index.php" . strtolower($class_name) . ".php";
    	        $uno = "cartella1/myClass1" . strtolower($class_name) . ".php";
    	        $unoB = "cartella1/myClass1b" . strtolower($class_name) . ".php";
                    $due = "cartella2/myClass2" .strtolower($class_name)" . ".php";
    	 
    	        if( file_exists($main) ) include $main;
    	    else if( file_exists($uno) ) include $uno;
    	        else if( file_exists($unoB) ) include $unoB;
    	        else if( file_exists($due) ) include $due;
    	}
    Ma questa funzione dove la devo inserire? In quale file?
    Ad esempio, il file cartella2/myClass2.php come fa a richiamare myClass1?
    Perchè non usare include_once invece di include?

  2. #2

    Re: _autoload : non ho ben capito come funziona

    Originariamente inviato da ajaxSensitive
    Ciao a tutti!

    Supponiamo di avere:

    index.php
    cartella1/myClass1.php
    cartella1/myClass1b.php
    cartella2/myClass2.php

    la funzione _autoload dovrebbe essere:
    codice:
    function __autoload($class_name) {
    
    	        $main = "index.php" . strtolower($class_name) . ".php";
    	        $uno = "cartella1/myClass1" . strtolower($class_name) . ".php";
    	        $unoB = "cartella1/myClass1b" . strtolower($class_name) . ".php";
                    $due = "cartella2/myClass2" .strtolower($class_name)" . ".php";
    	 
    	        if( file_exists($main) ) include $main;
    	    else if( file_exists($uno) ) include $uno;
    	        else if( file_exists($unoB) ) include $unoB;
    	        else if( file_exists($due) ) include $due;
    	}
    Ma questa funzione dove la devo inserire? In quale file?
    Ad esempio, il file cartella2/myClass2.php come fa a richiamare myClass1?
    Perchè non usare include_once invece di include?
    Non è che ti da l'istanza, se tu chiami l'operatore "new" su una classe e questa classe non viene trovata puoi cercare di mhmhmh "tipo" catchare l'eccezione includendo il file che può contenere la classe, puoi definire diversi autoloader aggiungendoli alla pila degli, dinuovo, autoloaders con la funzione spl_autoload_register('func_name');

    tutti gli autoloader aggiunti alla pila cercheranno di trovare la classe, alla fine se l'operazione fallisce il parser restituisce un errore fatale :-o

  3. #3
    Ho capito quello che hai scritto. ma non ho capito come farlo...
    In pratica, "io dovrei ad ogni classe mettere una riga di codice che mi permettere di andare a leggere una funzione _autoload, questa se non trova nulla, chiama ricorsivamente un altra funzione _autoload e così via"...
    scusami ma non so come esprimermi...
    Ma questa funzioni _autoload dove le metto? in un file a parte?

    spl_autoload_register('func_name');
    func_name sarebbe?

    PS "Ho capito la differenza fra AND AND e AND (cit. Kernighan & Ritchie)" bellissima =)

  4. #4
    Originariamente inviato da ajaxSensitive
    Ho capito quello che hai scritto. ma non ho capito come farlo...
    In pratica, "io dovrei ad ogni classe mettere una riga di codice che mi permettere di andare a leggere una funzione _autoload, questa se non trova nulla, chiama ricorsivamente un altra funzione _autoload e così via"...
    scusami ma non so come esprimermi...
    Ma questa funzioni _autoload dove le metto? in un file a parte?

    spl_autoload_register('func_name');
    func_name sarebbe?

    PS "Ho capito la differenza fra AND AND e AND (cit. Kernighan & Ritchie)" bellissima =)
    autoload mi sa che in linea teorica è un catcher andrebbe quindi messo una volta sola in un file incluso in tutte le pagine, func_name è un nome della variabile, sappi che il parser può immagazinare funzioni dentro variabili per esempio

    Codice PHP:
    <?php

    function hello_world() {
    echo 
    "Hello World";
    }
    $hello hello_world;

    $hello();

    ?>
    quindi quel parametro è il nome della funzione che andrà nella pila degli autoloader :-o

    PS "Gh" mi è rimasta impressa dentro quella frase :-p pure a te?

    Edit. immagazzinare(??) :-o

  5. #5
    Utente di HTML.it L'avatar di luca200
    Registrato dal
    Apr 2002
    Messaggi
    4,120
    Codice PHP:
    function __autoload($class_name) {
                
    $try1 'cartella1/' strtolower($class_name) . ".php";
                    
    $try2 'cartella2/'strtolower($class_name) . ".php";
                    if (
    file_exists($try1)) {
                        include 
    $try1;
                    } else {
                        include 
    $try2;
                    }
        } 
    Questo funziona a patto che tu abbia i nomi delle classi uguali a quelli dei file, e che non ci siano classi con lo stesso nome nelle due cartelle, altrimenti verrebbe caricata sempre quella in cartella1.
    La funzione la devi mettere in un file che già includi in tutti gli script, ovviamente.

  6. #6
    Questo funziona a patto che tu abbia i nomi delle classi uguali a quelli dei file, e che non ci siano classi con lo stesso nome nelle due cartelle, altrimenti verrebbe caricata sempre quella in cartella1.
    La funzione la devi mettere in un file che già includi in tutti gli script, ovviamente.
    Ah ok!

    in pratica così:

    /cartella1/carica.php
    codice:
    function __autoload($class_name) {  
           //lista di tutte le classi - tra cui la classe /cartella3/pippo.php -
    }
    /cartella2/ciao.php
    codice:
    include_once "./cartella1/carica.php";
    class ciao {
            //costruttore
          //getter e setter ecc...
          pippo = new pippo; //e automaticamente controlla la funzione _autoload del file carica.php
    }
    corretto?
    grazie 1000

  7. #7
    mi sorge ancora un dubbio...
    la funzione spl_autoload_register() e le altre funzioni della libreria spl, non credo che mi serviranno se io nella funzione _autoload inserisco tutte le classi... oppure in quale caso mi sarà utile questa funzione?
    (nell'articolo pubblicato qui su html.it, che tratta l'argomento, dice che questa funzione serve per "registrare"... registrare? che significa?)

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.