PHP中static关键字原理的学习研究分析_PHP
看PHP手册的时候发现了下面这样一段代码:
复制代码 代码如下:
function Test()
{
static $count = 0;
$count++;
echo $count;
if ($count Test();
}
$count--;
}
?>
执行结果如下:
这是一个递归的函数,声明的静态变量count记录次数,输出1~10。
我在看的时候有个疑惑,递归调用的时候 static $count = 0; 语句会重复执行,这为什么不会导致count变量被重复赋值呢?带着这个疑问和同事研究了一下,测试用代码如下:
复制代码 代码如下:
echo 'start
';
static $a = 10;
echo "$a
";
unset($GLOBALS['a']);
echo "$a
";
static $a = 20;
echo "$a
";
$GLOBALS['a'] = 10;
echo "$a
";
static $a = 30;
echo "$a
";
unset($GLOBALS['a']);
echo "$a
";
static $a;
echo "$a
";
static $a = 40;
echo "$a
";
$a = 100;
echo "$a
";
static $a = 50;
echo "$a
";
static $a = 4;
echo "$a
";
echo 'end
';
exit;
?>
执行结果如下:
start
- 4
- Notice: Undefined variable: a
- 4
- 10
- 10
- Notice: Undefined variable: a
- 10
- 10
- 100
- 100
- 100
- end
代码第5行第一次输出$a的值为4,由此推测PHP在页面初始化的时候分配静态变量的内存,此时使用了同一个变量的最后一次声明的值(这个可以把4改为其他数测试)。代码第7行调用unset函数销毁变量$a,再次输出$a的值时看到未定义变量的提示,说明变量已经被销毁。
第10行再次输出时,输出结果仍是4而不是20,有两种可能,一个是php再次初始化了$a的值,另一种是php使用了$a被销毁前的值,这个问题在第20行输出的时候解决。第16行$a销毁的时候值为10,第19行声明后输出仍为10。
第11行将$a的值修改为10,在14行再次声明$a,17行输出认为10。推测为重复声明时php还是使用静态变量内存中的值,而不再次赋值。
至此,手册中发现的问题,大致上已经解决了,即递归调用中的声明没有改变$count的值,所以递归在$count=10时成功停止。
可能有理解不正确的地方,欢迎拍砖。

핫 AI 도구

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

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

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

Clothoff.io
AI 옷 제거제

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

인기 기사

뜨거운 도구

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

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

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

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

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

뜨거운 주제











C 언어에서 정적의 역할 및 사용법: 1. 변수 범위, 3. 내부 함수, 5. 함수 수정, 1. 변수 범위, 변수 앞에 static 키워드가 있는 경우 변수의 범위는 변수가 선언된 파일로 제한됩니다. 즉, 변수는 "파일 수준 범위"이므로 " 중복 정의" 변수 문제 2. 수명주기, 정적 변수는 프로그램 실행을 시작할 때 한 번 초기화되고 프로그램이 끝나면 소멸됩니다.

1. static 먼저 다음 프로그램을 살펴보십시오. publicclassHello{publicstaticvoidmain(String[]args){//(1)System.out.println("Hello, world!");//(2)}} 이것을 보았습니다. 세그먼트 프로그램은 Java를 공부한 대부분의 사람들에게 친숙합니다. Java를 배우지 않았지만 C 등 다른 고급 언어를 배웠더라도 이 코드의 의미를 이해할 수 있어야 합니다. 단순히 "Hello, world"를 출력하고 다른 용도는 없습니다. 그러나 정적 키워드의 주요 목적을 보여줍니다.

C 언어 static 키워드의 실제 응용 시나리오 및 활용 기술 1. 개요 static은 C 언어에서 변수와 함수를 수정하는 데 사용되는 키워드입니다. 그 기능은 프로그램 실행 중에 수명 주기와 가시성을 변경하여 변수와 함수를 정적으로 만드는 것입니다. 이 기사에서는 static 키워드의 실제 응용 시나리오와 사용 기술을 소개하고 구체적인 코드 예제를 통해 설명합니다. 2. 정적 변수는 변수의 수명 주기를 연장합니다. static 키워드를 사용하여 지역 변수를 수정하면 수명 주기가 연장됩니다.

Modifier abstract (추상) 1. Abstract는 클래스를 수정할 수 있습니다. (1) abstract로 수정한 클래스를 추상 클래스라고 합니다. (2) 문법: abstractclass 클래스 이름 {} (3) 특징: 추상 클래스는 객체를 별도로 생성할 수는 없지만 객체를 생성할 수는 있습니다. 선언됨 추상 클래스 클래스 이름 참조 이름; (4) 추상 클래스는 멤버 변수 및 멤버 메소드를 정의할 수 있습니다. (5) 추상 클래스에는 생성자가 있습니다. 하위 클래스 객체를 생성하는 데 사용되면 jvm은 기본적으로 상위 클래스 객체를 생성합니다. 적용 jvm이 상위 클래스 객체를 생성할 때 적용됩니다. 2. Abstract는 메서드를 수정할 수 있습니다. (1) asbtract로 수정된 메서드를 추상 메서드라고 합니다. (2) 구문: 액세스 한정자 추상 반환 값

정적 기능: 1. 변수 3. 클래스 4. 기타 용도 6. 싱글톤 모드 9. 로컬 변수 메모리 레이아웃 최적화; 11. 반복적인 초기화를 피하십시오. 12. 함수에 사용하십시오. 자세한 소개: 1. 변수, 정적 변수. 변수가 정적으로 선언되면 인스턴스 수준이 아닌 클래스 수준에 속합니다. 즉, 개체 수에 관계없이 정적 변수는 하나만 존재하며 모든 개체가 존재합니다. 이 정적 변수 등을 공유하십시오.

Springboot는 pro 파일을 읽고 정적 정적 변수 mailConfig.properties#Server mail.host=smtp.qq.com#포트 번호 mail.port=587#이메일 계정 mail.userName=hzy_daybreak_lc@foxmail.com#이메일 인증 코드 메일을 주입합니다. passWord =vxbkycyjkceocbdc#시간 지연 mail.timeout=25000#Sender mail.emailForm=hzy_daybreak_lc@foxmail.com#Sender mai

PHP 정적 정적 메서드의 "정적"은 클래스를 인스턴스화하지 않고도 이러한 속성과 메서드를 직접 호출할 수 있음을 의미합니다. static은 클래스의 속성과 메서드를 수정하는 데 사용되는 키워드이며 사용 구문은 "class Foo { 공개 정적 $my_static = 'hello';}".

PHP는 웹 개발에 널리 사용되는 인기 있는 오픈 소스 서버 측 스크립팅 언어입니다. PHP 언어는 배우고 사용하기 쉬울 뿐만 아니라 다양한 프로그래밍 패러다임, 객체지향 프로그래밍, 함수형 프로그래밍 등을 지원합니다. PHP에는 Static, Final, Abstract 등과 같은 몇 가지 특수 구문 키워드가 있습니다. 이러한 키워드는 객체 지향 프로그래밍에서 특별한 기능을 가지고 있습니다. 이 기사에서는 이러한 키워드를 자세히 소개합니다. 정적 키워드 PHP에서 정적 키워드는 두 가지 용도로 사용됩니다.
