Come Funziona L'autoload ?

Sto cercando di creare una estensione per includere una libreria php chiamata Cron

L’oggetto principale si trova in vendor/cron/CronExpression.php

Dato che quel php NON carica in automatico gli altri file .php di cui ha bisogno, e che stanno nella stessa cartella, ho pensato di creare un autoloader.




class MyExtension extends CComponent

{

    private static $class_path;


    public static function ncron_autoload($class_name)

    {

        // include_once($class_name. ".php");

        $path = self::$class_path."/".$class_name . ".php";

        if (file_exists($path)) {

            include($path);

        } 

        return true;

    }


    public function init() {

        self::$class_path = Yii::import("application.vendor.Cron.*");

        Yii::registerAutoloader(array ("MyExtension", "ncron_autoload") );

        return new CronExpression();

    }


}



Questo codice però provoca un errore di ‘cannot redeclare’, dovuto al fatto che l’autoload di Yii viene eseguito lo stesso

si veda il codice dell’autoload di Yii qui: https://github.com/yiisoft/yii/blob/1.1.14/framework/YiiBase.php#L397

Come faccio a dire a php ‘quella classe c’è già in memoria’ ?

Oppure, come faccio ad EVITARE di caricare io la classe e far si che lo faccio yii da solo ?

Prova con include_once invece che include. Brutta, ma valida soluzione.

è la prima volta che scrivo una estension … e anche con l’include_once scopppia, perchè è Yii con il suo autoload che dopo fa l’include …

qual’è la soluzione pulita ?

Com’è fatta la tua estensione? E’ su github o bitbucket così possiamo vederla?

volendo la prima volta fissi una variabile statica della tua classe

se poi la rinizializzi e la variabile è settata salti l’include?

scusate se non ho più risposto, ma avendo dei tempi da rispettare abbiamo rinunciato …