Domanda

Sto integrando codice di terze parti nell'applicazione Web che sto scrivendo in Zend Framework.

Il codice che voglio integrare dichiara le variabili come globali. Funziona da solo, ma non quando lo includo in Zend Framework. Inizialmente sospettavo che ci fosse qualcosa in Zend Framework che stava disabilitando la dichiarazione delle variabili globali. Ho il seguente codice di prova in un controller:

public function testglobalAction()
{
   $a = 1;
   function b()
   {
      global $a;
      echo $a*2;
   }

   b();
}

Quando l'ho eseguito, stampa 0, invece di 2. Inoltre, lo stesso codice che esegue da solo nello stesso server web ne stampa 2.

Comprendo che potrei sostituire tutte le istanze globali per usare Zend Registry. Tuttavia, un grep mi ha mostrato che ci sono circa 700 linee che devo cambiare, quindi al momento non è fattibile.

Qualcuno sa come posso risolvere questo problema?

È stato utile?

Soluzione

La tua $ a variabile originale non è globale.

Qualsiasi variabile dichiarata all'interno di un metodo è locale per quel metodo, a meno che non sia stata precedentemente dichiarata globale nell'ambito corrente.

Prova questo

public function testglobalAction()
{
    global $a;
    $a = 1;
    function b()
    {
        global $a;
        echo $a*2;
    }

    b();
}

Altri suggerimenti

No. Zend Framework non disabilita i globali, in quanto non è possibile. L'array $ GLOBALS è controllato dalla direttiva php.ini register_globals . Non può essere modificato in fase di esecuzione utilizzando ini_set .

Consulta la documentazione per riferimento.

Nota: controlla i tuoi file .htaccess per eventuali override php_value per directory.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top