>  기사  >  백엔드 개발  >  php7의 새로운 기능: php7이 가져온 변경 사항

php7의 새로운 기능: php7이 가져온 변경 사항

L
L앞으로
2020-05-30 10:17:552630검색

php7의 새로운 기능: php7이 가져온 변경 사항

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 = &#39;xy&#39;;
list($x, $y) = $str;

空的list()赋值不再允许

list() = [123];

list()现在也适用于数组对象

list($a, $b) = (object)new ArrayObject([0, 1]);

6.变量处理机制修改

对变量、属性和方法的间接调用现在将严格遵循从左到右的顺序来解析,而不是之前的混杂着几个特殊案例的情况。 下面这张表说明了这个解析顺序的变化。

php7의 새로운 기능: php7이 가져온 변경 사항

引用赋值时自动创建的数组元素或者对象属性顺序和以前不同了

$arr = [];
$arr[&#39;a&#39;] = &$arr[&#39;b&#39;];$arr[&#39;b&#39;] = 1;
// php7: [&#39;a&#39; => 1, &#39;b&#39; => 1]
// php5: [&#39;b&#39; => 1, &#39;a&#39; => 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는 복사본입니다. 배열 연산

rrreee

최신 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. 변수 처리 메커니즘 수정🎜🎜🎜변수, 속성 및 메소드에 대한 간접 호출은 이제 왼쪽에서 오른쪽으로 엄격하게 따릅니다. 이전 상황 대신 여러 특수 사례가 혼합되어 분석됩니다. 아래 표에서는 구문 분석 순서의 이러한 변경 사항을 보여줍니다. 🎜🎜php7의 새로운 기능: php7이 가져온 변경 사항🎜🎜참조 할당이 이전과 다를 때 자동으로 생성되는 배열 요소 또는 객체 속성의 순서🎜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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 csdn.net에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제