Cambiamenti non compatibili
Anche se la maggior parte del codice PHP 5 esistente dovrebbe funzionare senza modifiche, occorre fare attenzione ai seguenti cambiamenti imcompatibili col codice precedente:
- getrusage() restituisce NULL quando riceve argomenti non compatibili a partire da PHP 5.2.1.
- ZipArchive::setCommentName() se ha con buon esito restituisce TRUE a partire da PHP 5.2.1.
- ZipArchive::setCommentIndex() se ha buon esito restituisce TRUE a partire da PHP 5.2.1.
- SplFileObject::getFilename() restituisce il nome del file, e non il percorso relativo del file, a partire da PHP 5.2.1.
- Cambiata la priorità della variabile d'ambiente PHPRC in Win32 Ora la variabile d'ambiente PHPRC ha priorità rispetto al percorso salvato nel registro di Windows.
- CLI SAPI non controlla più la cartella corrente in php.ini o nel file php-cli.ini In PHP 5.1.x fu aggiunta una funzionalità non documentata nella versione CLI, la quale cercava nella cartella corrente un file di configurazione PHP, potenzialmente causando comortamenti non prevedibili nel caso fosse letto un file con configurazioni inattese. Questa funzionalità è stata rimossa nel 5.2.0, e PHP non cercherà più nella CWD la presenza di php.ini o php-cli.ini. Vedere anche la sezione command line del manuale.
-
Aggiunto un allarme quando si eseguono operazioni a modulo 0
Nelle prime bersioni di PHP, l'esecuzione di intero % 0 restituiva non dei
messaggi di allarme, bensì un valore FALSE inaspettato.
Dal PHP 5.2.0, questa operazione crea un E_WARNING,
come in tutte le altre situazioni in cui viene eseguita una divisione per 0.
<?php
print 10 % 0;
/* Warning: Division by zero in filename on line n */
?> -
La funzione__toString() viene sempre chiamata dove
possibile.
Il metodo 'magico' __toString() viene ora chiamato
nel contesto di stringa, ovvero, ovunque un oggetto sia usato come una
stringa.
La soluzione di ripiego di restituire una stringa che contiene
l'identificativo dell'oggetto è stata abbandonata col PHP 5.2.0. Questo è diventato
problematico poiché un identificativo di oggetto non può essere considerato
univoco. Questo cambiamento significa che qualsiasi applicazione che si basi sugli identificativi
come valore di ritorno è da correggere. Un tentativo
di utilizzare questo valore come stringa ora risulterà in un errore fatale
intercettabile.
<?php
class foo {}
$foo = new foo;
print $foo;
/* Catchable fatal error: Object of class foo could
not be converted to string in filename on line n */
?><?php
class foo {
public function __toString() {
throw new Exception;
}
}
try {
print new foo;
/* Fatal error: Method foo::__toString() must
not throw an exception in filename on line n */
} catch(Exception $e) {}
?> -
Abbandonate le funzioni astratte statiche.
A causa di una svista, PHP 5.0.x e 5.1.x permettevano funzioni astratte e statiche
nelle classi. Dal PHP 5.2.x solo le interfacce possono averle.
<?php
abstract class foo {
abstract static function bar();
/* Strict Standards: Static function foo::bar()
should not be abstract in filename on line n */
}
?> - L'estensione Oracle richiede almeno Oracle 10 in Windows.
-
Aggiunto il supporto a RFC2397 (data: stream).
L'introduzione dello schema di URL 'data' può portare ad un
cambio nel comportamento sotto Windows. Se si lavora con un filesystem NTFS
e nell'applicazione si usano i meta stream, non sarà più possibile effettuare operazioni
su un file di nome 'data:' che venga raggiunto senza
informazioni sul percorso. Il rimedio è utilizzare il protocollo 'file:'
per accedere al file.
Vedere anche » RFC 2397
<?php
/* when allow_url_include is OFF (default) */
include "data:;base64,PD9waHAgcGhwaW5mbygpOz8+";
/* Warning: include(): URL file-access is disabled
in the server configuration in filename on line n */
?> - Regressione nei pattern glob() Nella versione 5.2.4 un fix di sicurezza ha causato una regressione per il pattern nella forma "/foo/*/bar/*". Dalla versione 5.2.5 invece di alzate un allarme la funzione glob() restituisce false quando le restrizioni openbase_dir sono violate.