php unset全局变量运用问题的深入解析_PHP教程
PHP unset全局变量在实际使用中只能销毁局部变量,并不能实现全局变量的目的。下面我们就来具体解决这一问题。希望对大家有所帮助。
PHP中语言中有些函数对于初学者来说在字面上是很难理解的,需要在实际编码中总结经验,来掌握这些知识。我们今天要为大家介绍的是PHP unset全局变量在使用中遇到的一些问题。
PHP 中有个释放变量的语句叫做unset(从PHP4开始unset已经不再是一个函数了,而是一个语句),前几天用unset的时候出了点问题,于是把 unset问题总结如下。如果您仔细阅读过PHP的手册,那么就没必要再看这篇文章了,这篇文章是写给看手册不用心的同学的。
首先要强调的一点是PHP unset全局变量在PHP中已经不再是一个函数了,既然不是函数,那么就没有了返回值,所以用的时候不能够用unset的返回值来做判断。
其次,在函数中,PHP unset全局变量只能销毁局部变量,并不能销毁全局变量,来看下手册的一个例子
function destroy_foo() {
global $foo;
unset($foo);
}
$foo = ‘bar';
destroy_foo();
echo $foo;
?>
返回的结果为
bar
为什么会这样呢?原因就是PHP unset全局变量在函数中只能销毁局部变量。如果在程序中需要用到销毁全局变量的应该如何做呢?也很简单,用$GLOBALS数组来实现。看下面的例子:
function foo() {
unset($GLOBALS['bar']);
}
$bar = “something”;
foo();
var_dump($bar);
?>
PHP unset()函数被我们用来销毁变量,但是往往在实际操作时不能使内存中的数据进行释放。我们在文章中讲为大家具体讲解有关问题的解决办法。
我们在学习PHP语言的时候,通常都会各个函数的用法比较模糊,很那去一一的掌握。但是我们又必须要掌握这些函数。下面我们就为大家详细介绍有关PHP unset()函数的相关使用方法。
PHP unset()函数是用来销毁变量的,但很多时候,这个函数只把变量给销毁了,内存中存放的该变量的值仍然没有销毁,也就是没能达到我们想要的释放内存的效果。这里我建议大家用 $变量=null 的方法来释放其内存。原因看了下面的就知道了。
以下是关于PHP unset()函数的几点要点:(以下均在windows环境下测试,php 2.5.9)
该函数只有在变量值所占空间超过256字节长的时候才会释放内存
只有当指向该值的所有变量(比如有引用变量指向该值)都被销毁后,地址才会被释放(也要执行1的判断)
下面给出例子代码论证:
$test=str_repeat("1",256); //重复一个字符串,返回值为重复后组成的字符串
$s = memory_get_usage();
//该函数用来查看当前所用内存
unset($test);
$e = memory_get_usage();
echo ' 释放内存: '.($s-$e);
//输出为272,但如果上面test变量改为$test=str_repeat("1",255),输出则为0 ,变量值不足256不会释放内存的
?>
至于为什么是272而不是256,就不是很清楚了,不知道内部是怎么处理的。
$test = str_repeat("1",256);
$p = &$test;
unset($test);
echo $p;
//输出为256个1。如果上面改为unset($p),更不行了,echo $test 直接显示为256个1
?>
也就是说内存中赋给$a的值仍然存在。可见unset()并没达到释放内存的效果。
但如果在上述代码中加入$test=null,或者再加一个unset($p),就能达到释放内存效果了,PHP unset()函数测试代码如下:
变量赋值为null方法:
$test = str_repeat("1",256);
$p = &$test;
$s = memory_get_usage();
$test = null;
unset($test); //试一下将该句与$test=null 调换先后顺序,则结果将不相同
$e = memory_get_usage();
echo ' 释放内存: '.($s-$e);
//输出为272
var_dump($p); //输出为NULL
?>
将指向该地址中值的变量全部销毁的方法:
$test = str_repeat("1",256);
$p = &$test;
$s = memory_get_usage();
//注意,以下2个unset()顺序对调没有关系,不影响结果
unset($p);
unset($test);
$e = memory_get_usage();
echo ' 释放内存: '.($s-$e); //输出为272
?>
到此PHP unset()函数论证完毕。

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











PHP 8.4는 상당한 양의 기능 중단 및 제거를 통해 몇 가지 새로운 기능, 보안 개선 및 성능 개선을 제공합니다. 이 가이드에서는 Ubuntu, Debian 또는 해당 파생 제품에서 PHP 8.4를 설치하거나 PHP 8.4로 업그레이드하는 방법을 설명합니다.

숙련된 PHP 개발자라면 이미 그런 일을 해왔다는 느낌을 받을 것입니다. 귀하는 상당한 수의 애플리케이션을 개발하고, 수백만 줄의 코드를 디버깅하고, 여러 스크립트를 수정하여 작업을 수행했습니다.

VS Code라고도 알려진 Visual Studio Code는 모든 주요 운영 체제에서 사용할 수 있는 무료 소스 코드 편집기 또는 통합 개발 환경(IDE)입니다. 다양한 프로그래밍 언어에 대한 대규모 확장 모음을 통해 VS Code는

JWT는 주로 신분증 인증 및 정보 교환을 위해 당사자간에 정보를 안전하게 전송하는 데 사용되는 JSON을 기반으로 한 개방형 표준입니다. 1. JWT는 헤더, 페이로드 및 서명의 세 부분으로 구성됩니다. 2. JWT의 작업 원칙에는 세 가지 단계가 포함됩니다. JWT 생성, JWT 확인 및 Parsing Payload. 3. PHP에서 인증에 JWT를 사용하면 JWT를 생성하고 확인할 수 있으며 사용자 역할 및 권한 정보가 고급 사용에 포함될 수 있습니다. 4. 일반적인 오류에는 서명 검증 실패, 토큰 만료 및 대형 페이로드가 포함됩니다. 디버깅 기술에는 디버깅 도구 및 로깅 사용이 포함됩니다. 5. 성능 최적화 및 모범 사례에는 적절한 시그니처 알고리즘 사용, 타당성 기간 설정 합리적,

이 튜토리얼은 PHP를 사용하여 XML 문서를 효율적으로 처리하는 방법을 보여줍니다. XML (Extensible Markup Language)은 인간의 가독성과 기계 구문 분석을 위해 설계된 다목적 텍스트 기반 마크 업 언어입니다. 일반적으로 데이터 저장 AN에 사용됩니다

문자열은 문자, 숫자 및 기호를 포함하여 일련의 문자입니다. 이 튜토리얼은 다른 방법을 사용하여 PHP의 주어진 문자열의 모음 수를 계산하는 방법을 배웁니다. 영어의 모음은 A, E, I, O, U이며 대문자 또는 소문자 일 수 있습니다. 모음이란 무엇입니까? 모음은 특정 발음을 나타내는 알파벳 문자입니다. 대문자와 소문자를 포함하여 영어에는 5 개의 모음이 있습니다. a, e, i, o, u 예 1 입력 : String = "Tutorialspoint" 출력 : 6 설명하다 문자열의 "Tutorialspoint"의 모음은 u, o, i, a, o, i입니다. 총 6 개의 위안이 있습니다

정적 바인딩 (정적 : :)는 PHP에서 늦은 정적 바인딩 (LSB)을 구현하여 클래스를 정의하는 대신 정적 컨텍스트에서 호출 클래스를 참조 할 수 있습니다. 1) 구문 분석 프로세스는 런타임에 수행됩니다. 2) 상속 관계에서 통화 클래스를 찾아보십시오. 3) 성능 오버 헤드를 가져올 수 있습니다.

PHP의 마법 방법은 무엇입니까? PHP의 마법 방법은 다음과 같습니다. 1. \ _ \ _ Construct, 객체를 초기화하는 데 사용됩니다. 2. \ _ \ _ 파괴, 자원을 정리하는 데 사용됩니다. 3. \ _ \ _ 호출, 존재하지 않는 메소드 호출을 처리하십시오. 4. \ _ \ _ get, 동적 속성 액세스를 구현하십시오. 5. \ _ \ _ Set, 동적 속성 설정을 구현하십시오. 이러한 방법은 특정 상황에서 자동으로 호출되어 코드 유연성과 효율성을 향상시킵니다.
