Modifications apportées par PHP7
1. Modifications du mécanisme de traitement des chaînes
含有十六进制字符的字符串不再视为数字, 也不再区别对待.
var_dump("0x123" == "291"); // false var_dump(is_numeric("0x123")); // false var_dump("0xe" + "0x1"); // 0 var_dump(substr("f00", "0x1")) // foo
2. Modification du mécanisme de traitement des entiers
Int64支持, 统一不同平台下的整型长度, 字符串和文件上传都支持大于2GB. 64位PHP7字符串长度可以超过2^31次方字节.
// 无效的八进制数字(包含大于7的数字)会报编译错误 $i = 0681; // 老版本php会把无效数字忽略。 // 位移负的位置会产生异常 var_dump(1 >> -1); // 左位移超出位数则返回0 var_dump(1 << 64);// 0 // 右位移超出会返回0或者-1 var_dump(100 >> 32);// 0 var_dump(-100 >> 32);// -1
3.
不支持重复参数命名
function func(b, c) {} ; une erreur sera signalée
func_get_arg()和func_get_args()这两个方法返回参数当前的值, 而不是传入时的值, 当前的值有可能会被修改
donc vous Il faut faire attention, il est préférable de l'enregistrer dans la première ligne de la fonction, sinon s'il y a une modification ultérieure, ce ne sera pas la valeur initiale transmise lors de la relecture.
function foo($x) { $x++; echo func_get_arg(0); } foo(1); //返回2
4.foreach modification
foreach()循环对数组内部指针不再起作用
$arr = [1,2,3]; foreach ($arr as &$val) { echo current($arr);// php7 全返回0 }
按照值进行循环的时候, foreach是对该数组的拷贝操作
$arr = [1,2,3]; foreach ($arr as $val) { unset($arr[1]); }var_dump($arr);
Le dernier php7 sera toujours imprimé [1,2,3]. (ps : 7.0.0 ne fonctionne pas)
L'ancien affichera [1,3]
按照引用进行循环的时候, 对数组的修改会影响循环
$arr = [1]; foreach ($arr as $val) { var_dump($val); $arr[1]=2; }
Le dernier php7 ajoutera toujours une boucle de nouveau éléments. (ps : 7.0.0 ne fonctionnera pas)
5. modification de la liste
不再按照相反的顺序赋值
//$arr sera [1, 2 ,3] au lieu du précédent [3,2,1]
list($arr[], $arr[], $arr[]) = [1,2,3];
不再支持字符串拆分功能
// $x = null 并且 $y = null $str = 'xy'; list($x, $y) = $str;
空的list()赋值不再允许
list() = [123];
list()现在也适用于数组对象
list($a, $b) = (object)new ArrayObject([0, 1]);
$arr = []; $arr['a'] = &$arr['b'];$arr['b'] = 1; // php7: ['a' => 1, 'b' => 1] // php5: ['b' => 1, 'a' => 1]
6. Modification du mécanisme de traitement des variables对变量、属性和方法的间接调用现在将严格遵循从左到右的顺序来解析,而不是之前的混杂着几个特殊案例的情况。 下面这张表说明了这个解析顺序的变化。
引用赋值时自动创建的数组元素或者对象属性顺序和以前不同了
rrreee
7. Divers
1.debug_zval_dump() imprime désormais "int" au lieu de "long", imprime "float" au lieu de "double"2.dirname() ajouté facultatif Le deuxième paramètre, profondeur, obtient le nom du répertoire parent un niveau de profondeur supérieur à celui du répertoire actuel. 3.getrusage() prend désormais en charge Windows.mktime() et les fonctions gmmktime() n'acceptent plus le paramètre is_dst. 4. La fonction preg_replace() ne prend plus en charge "e" (PREG_REPLACE_EVAL) doit être utilisée à la place. La fonction 5.setlocale() n'accepte plus la chaîne d'entrée de catégorie. Les constantes LC_* doivent être utilisées. Les fonctions 6.exec(), system() et passthru() ont ajouté une protection contre NULL.7.shmop_open() renvoie désormais une ressource au lieu d'un int. passé à shmop_size(), shmop_write(), shmop_read(), shmop_close() et shmop_delete().8 Pour éviter les fuites de mémoire, xml_set_object() nécessite désormais un effacement manuel de $parse à la fin de l'exécution. .
L'élément de paramètre 9.curl_setopt CURLOPT_SAFE_UPLOAD change
TRUE désactive le préfixe @ pour l'envoi de fichiers dans CURLOPT_POSTFIELDS. Cela signifie que @ peut être utilisé en toute sécurité dans les champs. CURLFile peut être utilisé comme alternative au téléchargement. Ajouté dans PHP 5.5.0, la valeur par défaut est FALSE. PHP 5.6.0 change la valeur par défaut en TRUE. . PHP 7 a supprimé cette option et vous devez utiliser l'interface CURLFile pour télécharger des fichiers.
Tutoriel recommandé : "Tutoriel PHP7"Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!