백엔드 개발 PHP 튜토리얼 浅谈PHP变量作用域以及地址引用问题_PHP

浅谈PHP变量作用域以及地址引用问题_PHP

Jun 01, 2016 am 11:58 AM
가변 범위

作用域的概念:

在PHP脚本的任何位置都可以声明变量,但是,声明变量的位置会大大影响访问变量的范围。这个可以访问的范围称为作用域。

主要的常用的包括:局部变量、全局变量、静态变量。

1、局部变量:就是在函数内声明的变量,他保存在内存的栈内,所以访问速度很快。仅在函数内有效。

2、全局变量:与局部变量相反,全局变量可以在程序的任何地方访问。只要在变量前面加关键字GLOBAL,就可以将其识别为全局变量。在整个php文件内有效。

3、静态变量:用static修饰只存在于函数作用域的变量,函数执行结束后其值并不消失。注:初始化后不能再次进行初始化,不能用表达式来赋值。

复制代码 代码如下:
function test()
{
static $b=0;//申明静态变量,放在函数外部声明的话,在函数内部是用不到的

$b=$b+1;

echo $b;
}
test();//这条语句会输出 $b的值 为1
test();//这条语句会输出 $b的值 为2

注:static $b=0 这一赋值操作只会在变量第一次被初始化的时候执行。

附A:类中静态成员和静态方法,差不多只是调用的时候统一使用类名或者self或者parent加::xxx,他们的作用域和这个一样,但是他的声明是在方法外部的

附B:js里面的作用域使:用var aa=‘xxx';在函数外面声明的就是全局变量(不管是否带有修饰符var)。在函数内部使用 var声明的是局部变量,不使用var修饰的是全局变量。

附C:关于引用

PHP引用:就是在变量、函数或者对象前加&.php中的引用就是想用不同的名字访问同一个变量的内容。

1、变量的引用:

复制代码 代码如下:
$a="ABC";

$b =&$a;

echo $a;//这里输出:ABC

echo $b;//这里输出:ABC

$b="EFG";

echo $a;//这里$a的值变为EFG 所以输出EFG

echo $b;//这里输出EFG

2、函数的传址调用

复制代码 代码如下:
function test(&$a)

{

$a=$a+100;

}

$b=1;

echo $b;//输出1

test($b); //这里$b传递给函数的其实是$b的变量内容所处的内存地址,通过在函数里改变$a的值 就可以改变$b的值了

echo "
";

echo $b;//输出101

3、函数的引用返回

复制代码 代码如下:
function &test()
{

static $b=0;//申明一个静态变量

$b=$b+1;

echo $b;

return $b;

}

$a=test();//这条语句会输出 $b的值 为1

$a=5;

$a=test();//这条语句会输出 $b的值 为2

$a=&test();//这条语句会输出 $b的值 为3

$a=5;

$a=test();//这条语句会输出 $b的值 为6

解析:使用$a=test()得到的其实不是函数的引用返回。只是将函数的返回值复制给$a,而不会影响到$b。这样调用和普通的调用没区别。

Php规定:$a=&test()方式得到才是函数的引用返回。他将$b变量的内存地址和$a变量的内存地址指向了同一个地方。即相当于$a=&$b;

4、取消引用

复制代码 代码如下:
$a = 1;

$b =& $a;

unset ($a);

echo $b;

解析:unset一个引用,只是取消了变量名和变量的内容之间的绑定,并不意味着内容被销毁,其值还是真实存在的。

5、global引用:使用global $var  声明一个变量时,其实就是建立了一个到全局变量的引用。Global $val $var=&$GLOBALS[‘var'] ;

6、对象的引用:在对象的方法中,$this调用的对象都是调用它的引用

注:php中对于地址的指向不是由用户自己来实现的,而是通过zend核心实现的,php的引用采用的是“写拷贝”的原理,就是除非发生写操作,指向同一个地址的变量或对象是不会被拷贝的。

复制代码 代码如下:
$a = 1;

$b =$a;

$a和$b都是指向同一个内存地址,并不是$a和$b占用不同的内存。

若是现在执行一句$a=”dsd”:$a和$b所指向的内存数据需要重新写一次,此时zend核心会自动判断。自动为$b产生一个$a的数据拷贝,重新申请一块内存进行存储。

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 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를 무료로 생성하십시오.

인기 기사

R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 아무도들을 수없는 경우 오디오를 수정하는 방법
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25 : Myrise에서 모든 것을 잠금 해제하는 방법
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

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

SublimeText3 중국어 버전

SublimeText3 중국어 버전

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

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

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

PHP 함수의 변수 범위는 어떻게 결정되나요? PHP 함수의 변수 범위는 어떻게 결정되나요? Apr 16, 2024 pm 04:51 PM

PHP의 변수 범위는 로컬(함수 내), 전역(프로그램 내에서 액세스 가능), 클래스 범위(클래스 인스턴스 내에서 액세스 가능)로 구분됩니다. global 키워드는 지역 변수를 전역 변수로 선언할 수 있고, static 키워드는 지역 변수를 정적 변수로 선언하여 함수 호출 간에 해당 값을 유지할 수 있습니다.

Golang 함수 수명주기 및 변수 범위에 대한 심층적인 이해 Golang 함수 수명주기 및 변수 범위에 대한 심층적인 이해 Apr 19, 2024 am 11:42 AM

Go에서 함수 수명주기에는 정의, 로드, 연결, 초기화, 호출 및 반환이 포함됩니다. 변수 범위는 함수 수준과 블록 수준으로 구분됩니다. 함수 내의 변수는 내부적으로 표시되지만 블록 내의 변수는 블록 내에서만 표시됩니다. .

Go 언어의 변수 범위 및 수명주기 Go 언어의 변수 범위 및 수명주기 Jun 01, 2023 pm 12:31 PM

Go 언어는 오픈 소스 정적으로 유형화된 언어로 단순성, 효율성, 신뢰성이라는 특징을 갖고 있어 개발자들에게 점점 더 사랑받고 있습니다. Go 언어에서 변수는 프로그램의 가장 기본적인 데이터 저장 형태입니다. 변수의 범위와 수명 주기는 프로그램의 정확성과 효율성에 매우 중요합니다. 변수의 범위는 변수의 가시성과 접근성, 즉 변수에 액세스할 수 있는 위치를 나타냅니다. Go 언어에서는 변수의 범위가 전역 변수와 지역 변수로 구분됩니다. 전역 변수는 함수 외부에서 정의된 변수이며 전체 프로그램의 어느 곳에서나 사용할 수 있습니다.

Golang 함수에서 변수 범위를 정의하는 방법은 무엇입니까? Golang 함수에서 변수 범위를 정의하는 방법은 무엇입니까? Apr 11, 2024 pm 12:27 PM

Go에서 함수 범위는 변수가 선언된 함수로 변수 가시성을 제한합니다. 함수 내에서 변수 선언: varnametype=value 범위는 선언된 코드 블록으로 제한되며 다른 함수나 중첩 블록은 이러한 변수에 액세스할 수 없습니다.

PHP 5.6 변수 범위: static 키워드를 사용하여 정적 변수를 정의하는 방법 PHP 5.6 변수 범위: static 키워드를 사용하여 정적 변수를 정의하는 방법 Jul 30, 2023 pm 11:02 PM

PHP5.6 변수 범위: static 키워드를 사용하여 정적 변수를 정의하는 방법 PHP에서 변수 범위는 변수의 가시성과 액세스 범위를 결정합니다. 정적 변수는 함수 호출 간에 값을 변경하지 않고 유지하는 특수한 유형의 변수입니다. PHP5.6 이상에서는 static 키워드를 사용하여 함수 및 클래스 메서드 내에서 정적 변수를 정의할 수 있습니다. 정적 변수의 특징은 다음과 같습니다. 정적 변수의 범위는 선언된 함수나 메서드로 제한됩니다. 정적 변수는 함수 또는 메서드 호출 사이에 사용됩니다.

PHP에서 변수를 사용하는 방법 PHP에서 변수를 사용하는 방법 May 20, 2023 pm 02:33 PM

PHP는 개발자가 서버 측에서 동적 웹 애플리케이션을 만들 수 있게 해주는 매우 인기 있는 웹 개발 언어입니다. PHP에서 변수는 값과 데이터를 저장하는 데 사용되는 기본 데이터 구조입니다. 이 글에서는 PHP에서 변수를 사용하는 방법을 소개합니다. 변수의 기본 구문 PHP에서 변수를 선언하는 구문은 매우 간단합니다. 변수 이름은 달러 기호($)로 시작하고 그 뒤에 변수 이름이 옵니다. 변수 이름은 문자, 숫자, 밑줄을 조합하여 사용할 수 있지만 반드시 문자나 밑줄로 시작해야 합니다. 예를 들어 다음 코드는 이름을 선언합니다.

PHP에서 슈퍼전역 변수를 사용하는 방법 PHP에서 슈퍼전역 변수를 사용하는 방법 May 20, 2023 pm 07:01 PM

PHP의 슈퍼전역 변수는 전역 범위에서 접근할 수 있는 변수를 의미합니다. 각 슈퍼전역 변수는 $_GET, $_POST, $_COOKIE 등 PHP에서 미리 정의된 많은 변수를 포함하는 연관 배열입니다. 이러한 초전역 변수는 양식 데이터 가져오기, URL 매개변수 가져오기 등과 같은 사용자 요청에서 정보를 얻는 중요한 방법을 제공하기 때문에 웹 개발에서 매우 중요합니다. 이 기사에서는 PHP에서 일반적으로 사용되는 슈퍼전역 변수의 기능과 사용 방법을 자세히 소개합니다.

Golang 함수의 변수 범위는 무엇입니까 Golang 함수의 변수 범위는 무엇입니까 Dec 22, 2023 pm 02:39 PM

Golang 함수의 변수 범위는 함수 내부 변수의 가시성과 수명주기를 나타냅니다. 변수는 함수 내 변수의 위치와 범위에 따라 지역변수, 매개변수 변수, 반환값 변수의 세 가지 유형으로 나눌 수 있습니다. 자세한 소개: 1. 지역 변수는 함수 내부에서 정의된 변수이며 함수 내에서만 사용할 수 있습니다. 해당 범위는 함수의 모든 코드 블록과 중첩된 코드 블록을 포함하여 함수 내부로 제한됩니다. 함수에서 받은 입력 매개변수는 함수 내부에서 사용할 수 있습니다. 해당 범위는 함수 내부 등으로 제한됩니다.

See all articles