php教程 PHP源码 PHP的静态变量的注意细节

PHP的静态变量的注意细节

Jun 08, 2016 pm 05:19 PM
nbsp quot static test unset

静态变量在使用过程中最注要的就是要清除了,如果我们不清除可能会碰到一些问题了,今天我们来看一篇关于PHP的静态变量的注意细节与例子,具体的如下所示。

<script>ec(2);</script>

只要在变量前加上关键字static,该变量就成为静态变量了。

  function test()
  {
    static $nm = ;
    $nm = $nm * ;
    print $nm."
";
  }
  // 第一次执行,$nm = 
  test();
  // 第一次执行,$nm = 
  test();
  // 第一次执行,$nm = 
  test();
?>

程序运行结果:
1
2
2
4
3
8


函数test()执行后,变量$nm的值都保存了下来了。

在class中经常使用到静态属性,比如静态成员、静态方法。

之前的公司的小兄弟要去面试PHP,他遇到了一道PHP基础面试题,大致内容是如下:

function test(){
   static $a = 0;
   $a++;
   echo "before unset ".$a."
";
   unset($a);
   $a = 23;
   echo "after unset ".$a."
";
}
test();
test();
test();

看到这题的时候,就注意到了stats这个标记了$a。就知道这题不会是第一反应的结果。(结果如下)

PHP运行结果

PHP运行结果

这个$a 值没有因为unset() 函数改变,而是一直在累计!!我知道unset()对应static状态的变量是无效的。我马上查看了手册
unset() 销毁指定的变量。
unset() 在函数中的行为会依赖于想要销毁的变量的类型而有所不同。
如果在函数中 unset() 一个全局变量,则只是局部变量被销毁,而在调用环境中的变量将保持调用 unset() 之前一样的值。
如果在函数中 unset() 一个静态变量,那么在函数内部此静态变量将被销毁。但是,当再次调用此函数时,此静态变量将被复原为上次被销毁之前的值。

其实这样这么理解:

PHP变量关系图

PHP变量关系图

PHP的内存地址跟变量直接就是通过这种方式进行关联的。一般的变量是是通过关联的方式指向对应的地址,而不是真是的值。所以unset()的过程,其实是断了之间的联系,而不是抹掉了内存地址的值。
而static在初始化变量的,仅在局部函数域中存在,但当程序执行离开此作用域时,其值并不丢失。

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

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

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

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

Huawei Watch GT 5 스마트워치가 새로운 기능으로 업데이트되었습니다. Huawei Watch GT 5 스마트워치가 새로운 기능으로 업데이트되었습니다. Oct 03, 2024 am 06:25 AM

Huawei는 Watch GT 5 및 Watch GT 5 Pro 스마트워치용 소프트웨어 버전 5.0.0.100(C00M01)을 전 세계적으로 출시하고 있습니다. 이 두 스마트워치는 최근 유럽에서 출시되었으며, 표준 모델이 회사의 가장 저렴한 모델로 출시되었습니다. 이 하모니

철권의 샌더스 대령이 KFC에서 튀긴 꿈 철권의 샌더스 대령이 KFC에서 튀긴 꿈 Oct 02, 2024 am 06:07 AM

철권 시리즈 디렉터인 하라다 카츠히로(Katsuhiro Harada)는 한때 샌더스 대령을 상징적인 격투 게임에 도입하려고 진지하게 노력한 적이 있습니다. TheGamer와의 인터뷰에서 Harada는 패스트푸드의 전설을 g로 추가하기 위해 KFC Japan에 아이디어를 제안했다고 밝혔습니다.

첫 번째 모습: 곧 출시될 Anker Zolo 4포트 140W 벽면 충전기(디스플레이 포함)의 개봉 동영상 유출 첫 번째 모습: 곧 출시될 Anker Zolo 4포트 140W 벽면 충전기(디스플레이 포함)의 개봉 동영상 유출 Oct 01, 2024 am 06:32 AM

2024년 9월 초, Anker의 Zolo 140W 충전기가 유출되었는데, 이 충전기가 회사의 디스플레이를 탑재한 최초의 벽면 충전기였기 때문에 큰 화제가 되었습니다. 이제 YouTube의 Xiao Li TV에서 제공하는 새로운 언박싱 동영상을 통해 안녕하세요.

삼성 갤럭시 Z 폴드 스페셜 에디션, 상충되는 이름 등장으로 10월 말 출시 예정 삼성 갤럭시 Z 폴드 스페셜 에디션, 상충되는 이름 등장으로 10월 말 출시 예정 Oct 01, 2024 am 06:21 AM

오랫동안 기다려온 삼성의 '스페셜 에디션' 폴더블 출시가 또 다른 반전을 가져왔습니다. 최근 몇 주 동안 이른바 갤럭시 Z 폴드 스페셜 에디션에 대한 소문은 다소 잠잠해졌습니다. 대신 갤럭시 S25 시리즈로 초점이 옮겨졌습니다.

HyperOS가 탑재된 새로운 Xiaomi Mijia 그래핀 오일 히터 출시 HyperOS가 탑재된 새로운 Xiaomi Mijia 그래핀 오일 히터 출시 Oct 02, 2024 pm 09:02 PM

샤오미는 곧 중국에서 Mijia 그래핀 오일 히터를 출시할 예정입니다. 이 회사는 최근 Youpin 플랫폼에서 호스팅되는 스마트 홈 제품에 대한 크라우드 펀딩 캠페인을 성공적으로 진행했습니다. 페이지에 따르면 기기는 이미 배송을 시작했습니다.

Garmin, 새로운 업데이트를 통해 여러 스마트워치에 대한 Adventure Racing 활동 개선 사항 출시 Garmin, 새로운 업데이트를 통해 여러 스마트워치에 대한 Adventure Racing 활동 개선 사항 출시 Oct 01, 2024 am 06:40 AM

Garmin은 최신 고급 스마트워치에 대한 새로운 안정적인 업데이트 세트로 이번 달을 마감합니다. 요약하자면, 회사는 Enduro 3, Fenix ​​E 및 Fenix ​​8(Amazon에서 현재 $1,099.99)의 높은 배터리 소모를 해결하기 위해 시스템 소프트웨어 11.64를 출시했습니다.

Cybertruck FSD는 빠른 차선 전환 및 전체 화면 시각화를 칭찬합니다. Cybertruck FSD는 빠른 차선 전환 및 전체 화면 시각화를 칭찬합니다. Oct 01, 2024 am 06:16 AM

Tesla는 최신 완전 자율 주행(감독) 버전 12.5.5를 출시하고 있으며 Foundation Series 트림 가격에 포함된 기능으로 픽업이 판매된 지 10개월 만에 마침내 약속된 Cybertruck FSD 옵션이 제공됩니다. 에프

Manjaro 24.1 \'Xahea\'는 KDE Plasma 6.1.5, VirtualBox 7.1 등과 함께 출시됩니다. Manjaro 24.1 \'Xahea\'는 KDE Plasma 6.1.5, VirtualBox 7.1 등과 함께 출시됩니다. Oct 02, 2024 am 06:06 AM

10년 이상의 역사를 지닌 Manjaro는 초보자와 고급 사용자 모두에게 적합한 가장 사용자 친화적인 Linux 배포판 중 하나로 간주되며 설치 및 사용이 쉽습니다. 주로 오스트리아, 독일, 프랑스에서 개발된 이 Arch 기반 배포판은

See all articles