Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

Verso PHP 5: cambiamenti non retrocompatibili

Uno sguardo ai principali cambiamenti di PHP 5 che potrebbero rendere incompatibile la vostra applicazione pensata per PHP 4.
Uno sguardo ai principali cambiamenti di PHP 5 che potrebbero rendere incompatibile la vostra applicazione pensata per PHP 4.
Link copiato negli appunti

Dopo la breve introduzione alla direttiva

[!] Ci sono problemi con l'autore. Controllare il mapping sull'Author Manager

, è doveroso proseguire il nostro cammino verso PHP 5 analizzando i principali cambiamenti nelle funzioni che potrebbero

[!] Ci sono problemi con l'autore. Controllare il mapping sull'Author Manager

del nostro programma.

PHP 5 ha

[!] Ci sono problemi con l'autore. Controllare il mapping sull'Author Manager

, alcune molto interessanti in merito alla gestione degli array.
Tuttavia, sempre in tema di funzioni, alcune già  presenti in PHP 4 hanno variato parte del loro comportamento rappresentando un problema nel caso il vostro programma le utilizzi e venga migrato a PHP 5.

La lista completa è disponibile alla voce

[!] Ci sono problemi con l'autore. Controllare il mapping sull'Author Manager

della documentazione di PHP 5, ma vediamo alcune casistiche.

I nomi delle classi sono ora case-sensitive

Una delle novità  principali di PHP 5 è il miglioramento del supporto alla programmazione object oriented (OOP).
Alcune modifiche non potevano dunque interessare le funzioni parte di PHP 4 che già  interagivano con il limitato supporto object oriented di questa versione del linguaggio.

Le funzioni

[!] Ci sono problemi con l'autore. Controllare il mapping sull'Author Manager

,

[!] Ci sono problemi con l'autore. Controllare il mapping sull'Author Manager

e

[!] Ci sono problemi con l'autore. Controllare il mapping sull'Author Manager

ora restituiscono i nomi delle classi e delle funzioni così come sono stati dichiarati, differenziando maiuscole da minuscole, mentre in PHP 4 il valore restituito è sempre minuscolo.

Lo stesso discorso per quanto riguarda le costanti __CLASS__, __METHOD__ e __FUNCTION__.

Dato questo esempio

class Test() {
    function Test() {
        // costruttore compatibile con PHP 4
    }
    function testClass() {
        return get_class(this);
        // identico a return __CLASS__ in questo caso
    }
    function testMethod() {
        return __METHOD__;
    }
}

avremo in PHP 4

$t = new Test();
print $t->testClass(); // test
print $t->testMethod(); // testmethod

mentre in PHP 5

$t = new Test();
print $t->testClass(); // Test
print $t->testMethod(); // testMethod

Oggetti, proprietà  ed empty

Per quanto riguarda gli oggetti, un oggetto senza proprietà  assegnate non è più considerato come empty, come dimostra il codice seguente.

class Test { }
$t = new Test();
var_dump(empty($t)); // bool(false)

dunque una condizione tipo

if ($t) {
    //
}

verrà  eseguita.

Sempre in tema di oggetti e funzioni, la funzione

[!] Ci sono problemi con l'autore. Controllare il mapping sull'Author Manager

è stata deprecata, in favore dell'operatore

[!] Ci sono problemi con l'autore. Controllare il mapping sull'Author Manager

.
L'uso di is_a() al momento non vi causerà  problemi, tuttavia è possibile che in futuro questa funzione non sia più disponibile.

class Test {
    function Test() {
        //
    }
}
$t = new Test();
// in PHP 4
if (is_a($t, 'Test')) {
    echo '$t è una istanza della classe Test';
}
// in PHP 5
if ($t instanceof Test) {
    echo '$t è una istanza della classe Test';
}

Cambio di parametri, risposta o comportamento

Alcune funzioni hanno cambiato il loro comportamento, altre il tipo di parametri, altre ancora la risposta.

[!] Ci sono problemi con l'autore. Controllare il mapping sull'Author Manager

, a partire da PHP 5, accetta solo array come parametri.
Potete applicare un cast di tipo ad array per essere sicuro che il parametro sia sempre un array.

$s = 'foo';
$a = array('bar');
// questa riga in PHP 4 funziona
// in PHP 5 genera errore
$r = array_merge($s, $a);
// ecco un piccolo workaround
// che funziona in PHP 4 e PHP 5
$r = array_merge((array) $s, (array) $a);

Le funzioni

[!] Ci sono problemi con l'autore. Controllare il mapping sull'Author Manager

e

[!] Ci sono problemi con l'autore. Controllare il mapping sull'Author Manager

richiedono che il parametro $needle sia una stringa, la sua lunghezza può superare il valore di un singolo carattere.

L'intera stringa sarà  usata per il confronto.

Infine, la funzione

[!] Ci sono problemi con l'autore. Controllare il mapping sull'Author Manager

utile a convertire un IPv4 in un intero ora restituisce false in caso il formato del parametro in ingresso non sia valido, in alternativa a -1.

$ip = '192.168.1.280'; // ip errato
$long = ip2long($ip);
// non funziona in PHP 5
if ($long == -1) {
    // ...
}
// funziona in PHP 4 e PHP 5
if ($long == -1 || $long === false) {
    // ...
}

include_once() e require_once() più intelligenti

Cambiamenti anche per include_once() e require_once().
I percorsi dei file inclusi, infatti, ora vengono normalizzati prima di essere processati quindi le seguenti casistiche sono ora escluse

  1. In Windows, includere File.inc.php e file.inc.php non causerà  l'inclusione duplice del file
  2. Includere File.inc.php e ../cartellaCorrente/File.inc.php non causerà  l'inclusione duplice del file

In conclusione

Nel caso in cui il vostro applicativo contiene elementi che rientrano in una delle casistiche sopra segnalate, è necessario agire al fine di rendere il programma compatibile con PHP 5.
A seconda delle necessità , il supporto a PHP 4 potrebbe essere mantenuto o volontariamente escluso (consigliato).

Questo articolo contiene link di affiliazione: acquisti o ordini effettuati tramite tali link permetteranno al nostro sito di ricevere una commissione nel rispetto del codice etico. Le offerte potrebbero subire variazioni di prezzo dopo la pubblicazione.

Ti consigliamo anche