PHP7
1. 문자열 처리 메커니즘 수정으로 인한 변경 사항
16진수 문자가 포함된 문자열은 더 이상 숫자로 간주되지 않으며 다르게 처리되지 않습니다.
含有十六进制字符的字符串不再视为数字, 也不再区别对待.
var_dump("0x123" == "291"); // false var_dump(is_numeric("0x123")); // false var_dump("0xe" + "0x1"); // 0 var_dump(substr("f00", "0x1")) // foo
2.整型处理机制修改
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) {} ;会报错
func_get_arg()和func_get_args()这两个方法返回参数当前的值, 而不是传入时的值, 当前的值有可能会被修改
所以需要注意,在函数第一行最好就给记录下来,否则后续有修改的话,再读取就不是传进来的初始值了。
function foo($x) { $x++; echo func_get_arg(0); } foo(1); //返回2
4.foreach修改
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);
最新的php7依旧会打印出[1,2,3]。(ps:7.0.0不行)
老的会打印出[1,3]
按照引用进行循环的时候, 对数组的修改会影响循环
$arr = [1]; foreach ($arr as $val) { var_dump($val); $arr[1]=2; }
最新的php7依旧会追加新增元素的循环。(ps:7.0.0不行)
5. list修改
不再按照相反的顺序赋值
//$arr将会是[1,2,3]而不是之前的[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]);
6.变量处理机制修改
对变量、属性和方法的间接调用现在将严格遵循从左到右的顺序来解析,而不是之前的混杂着几个特殊案例的情况。 下面这张表说明了这个解析顺序的变化。
引用赋值时自动创建的数组元素或者对象属性顺序和以前不同了
$arr = []; $arr['a'] = &$arr['b'];$arr['b'] = 1; // php7: ['a' => 1, 'b' => 1] // php5: ['b' => 1, 'a' => 1]
2. 정수 처리 메커니즘 수정
Int64 지원, 다양한 플랫폼에서 정수 길이 통합, 문자열 및 파일 업로드 모두 2GB보다 큰 지원 2^31바이트 이상.<p>rrreee</p>
<p>3. 매개변수 처리 메커니즘 수정</p>
<p></p>
<code>반복 매개변수 이름 지정을 지원하지 않습니다.
function func(b, c) {}; 오류가 보고됩니다
func_get_arg() 와 func_get_args() 두 메소드는 전달된 값이 아닌 매개변수의 현재 값을 반환합니다. 현재 값은 수정될 수 있습니다
그래서 주의가 필요합니다. 함수의 첫 번째 줄에 있습니다. 그렇지 않으면 후속 수정이 있는 경우 다시 읽을 때 전달된 초기 값이 아닙니다. rrreee
4.foreach 수정
foreach() 루프는 더 이상 배열의 내부 포인터에서 작동하지 않습니다
rrreee값에 따라 반복할 때 foreach는 복사본입니다. 배열 연산
최신 php7에서는 여전히 [1,2,3]이 인쇄됩니다. (ps: 7.0.0은 작동하지 않음) 이전 버전은 [1,3]을 인쇄합니다
참조에 따라 반복할 때 배열을 수정하면 루프에 영향을 미칩니다.
🎜rrreee🎜최신 php7은 여전히 그것을 할 것입니다. 새로운 요소를 추가하는 루프입니다. (ps: 7.0.0은 작동하지 않습니다)🎜🎜🎜5. 목록 수정🎜🎜🎜더 이상 값을 역순으로 할당하지 않습니다
🎜🎜//$arr는 [1,2,3입니다. ] 대신 이전 [3,2,1]🎜rrreee🎜에서는 더 이상 문자열 분할 기능을 지원하지 않습니다.
🎜rrreee🎜빈 list() 할당은 더 이상 허용되지 않습니다
🎜rrreee🎜 list()는 이제 배열 객체에서도 작동합니다.🎜rrreee🎜🎜6. 변수 처리 메커니즘 수정🎜🎜🎜변수, 속성 및 메소드에 대한 간접 호출은 이제 왼쪽에서 오른쪽으로 엄격하게 따릅니다. 이전 상황 대신 여러 특수 사례가 혼합되어 분석됩니다. 아래 표에서는 구문 분석 순서의 이러한 변경 사항을 보여줍니다.
🎜🎜🎜🎜참조 할당이 이전과 다를 때 자동으로 생성되는 배열 요소 또는 객체 속성의 순서
🎜rrreee🎜🎜7. Miscellaneous🎜🎜🎜1.debug_zval_dump()는 이제 " 대신 "int"를 인쇄합니다. long" , "double" 대신 "float" 인쇄 🎜🎜2.dirname()은 선택적인 두 번째 매개변수인 깊이를 추가하여 현재 디렉터리의 상위 깊이 수준에서 상위 디렉터리의 이름을 가져옵니다. 🎜🎜3.getrusage()는 이제 Windows.mktime()을 지원하며 gmmktime() 함수는 더 이상 is_dst 매개변수를 허용하지 않습니다. 🎜🎜4. preg_replace() 함수는 더 이상 "e"(PREG_REPLACE_EVAL)를 지원하지 않습니다. 대신 Preg_replace_callback()을 사용해야 합니다. 🎜🎜5.setlocale() 함수는 더 이상 카테고리 입력 문자열을 허용하지 않습니다. LC_* 상수를 사용해야 합니다. 🎜🎜6.exec(), system() 및 passthru() 함수에 NULL에 대한 보호 기능이 추가되었습니다. 🎜🎜7.shmop_open()은 이제 int 대신 리소스를 반환합니다. 이 리소스는 shmop_size(), shmop_write( ), shmop_read(), shmop_close() 및 shmop_delete().🎜🎜8. 메모리 누수를 방지하려면 이제 xml_set_object()에서 실행 종료 시 $parse를 수동으로 지워야 합니다. 🎜🎜9.curl_setopt 설정 항목 CURLOPT_SAFE_UPLOAD 변경됨🎜🎜TRUE CURLOPT_POSTFIELDS의 파일 전송에 @ 접두어를 비활성화합니다. 이는 @를 필드에서 안전하게 사용할 수 있음을 의미합니다. CURLFile을 업로드 대안으로 사용할 수 있습니다. 🎜PHP 5.5.0에 추가되었으며 기본값은 FALSE입니다. PHP 5.6.0에서는 기본값을 TRUE로 변경합니다. . PHP 7에서는 이 옵션이 제거되었으며 파일을 업로드하려면 CURLFile 인터페이스를 사용해야 합니다. 🎜🎜추천 튜토리얼: "🎜PHP7 튜토리얼🎜"🎜위 내용은 php7의 새로운 기능: php7이 가져온 변경 사항의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!