>  기사  >  백엔드 개발  >  PHP에서 함수와 변수 앞에 @ 및 $ 기호를 추가하는 것의 차이점에 대한 자세한 설명

PHP에서 함수와 변수 앞에 @ 및 $ 기호를 추가하는 것의 차이점에 대한 자세한 설명

伊谢尔伦
伊谢尔伦원래의
2017-06-21 11:01:577434검색

@ operatorexpressions에만 유효합니다. 초보자를 위한 간단한 규칙은 다음과 같습니다. 어딘가에서 값을 얻을 수 있으면 값 앞에 @ 연산자를 추가하세요. 예를 들어 변수, 함수, include() 호출, 상수 등 앞에 배치할 수 있습니다. 함수나 클래스 정의 앞에 배치할 수 없으며 if 및 foreach와 같은 조건부 구조에서도 사용할 수 없습니다.
현재 "@" 오류 제어 연산자접두사는 스크립트 종료를 초래하는 심각한 오류의 오류 보고도 비활성화합니다. 즉, 존재하지 않거나 잘못된 유형의 함수 호출 전에 "@"를 사용하여 오류 메시지를 표시하지 않으면 스크립트는 이유를 표시하지 않고 종료됩니다.

$의 경우 이것이 우리의 핵심 문제입니다

기본 형식:

function &find_var($param) //这里用&在对象前面,作用为声明
{
    /* ...code... */
    return $found_var;
}
$foo =& find_var($bar); //这里用&,作用为联系变量
$foo->x = 2; //赋值给函数

예:

function &test()   
{   
static $b=0;//申明一个静态变量   
$b=$b+1;   
echo $b;   
return $b;   
}   
$a=test();//这条语句会输出$b的值为1,
$a=5;   
$a=test();//这条语句会输出$b的值为2 ,因为没有引用返回,$a=5,不对对象起赋值作用
$a=&test();//这条语句会输出$b的值为3 ,成功引用返回,下面的代码起作用
$a=5;   
$a=test();//这条语句会输出$b的值为6

아래 설명:
이런 방식으로 $a=test()는 실제로 참조 반환을 얻지 못합니다. function 은 일반적인 함수 호출과 다르지 않습니다. 이유는 다음과 같습니다. 이는 PHP의 규정입니다.
php에서는 $a=&test();를 통해 함수의 참조 반환을 얻도록 규정합니다.
참조 반환이 무엇인지에 대해(PHP 설명서에 따르면 참조 반환은 참조가 바인딩되어야 하는 변수를 찾기 위해 함수를 사용하려는 경우에 사용됩니다.)
위의 예를 사용하여 설명합니다.
$a=test ( ) 메소드는 함수의 값을 $a에 할당할 뿐이며 $a에 대한 변경 사항은 $a=&test()를 통해 함수를 호출할 때 해당 함수의 메모리 주소에 영향을 주지 않습니다. $b를 반환하는 $b 변수와 $a 변수의 메모리 주소는 동일한 위치로 이동하여 동일한 효과를 생성합니다($a=&b;). 따라서 $a 값을 변경하면 $a 값도 변경됩니다. $b의 값이므로 $a=&test();
$a=5;
를 실행한 후 $b의 값은 5가 됩니다...

그런 다음 PHP 함수 앞에 앰퍼샌드를 추가하세요. 그렇죠?

php 변수 앞의 앰퍼샌드 기호는 무엇을 의미하나요? 먼저 예를 살펴보겠습니다.

$foo = 321;
$bar = &$foo; 
$bar = 123;
print $foo;
//那么输出的结果将会是什么呢

새 변수를 변경하면 원래 변수에 영향을 미치게 됩니다.

참고: 이름이 지정된 변수만 주소별로 할당할 수 있습니다. 즉, $bar 값을 변경하면 $foo 값도 변경됩니다.

또 다른 예:


$_GET[1] = 1;
function &a()
{
 $a = $_GET[1];
 return $a;
}
$x =& a();
$x = 'MoontoC';
echo $_GET[1]; // 此时这里会显示 MoontoC, 而不是最初赋值的1

의미를 이해하셨나요?

함수를 사용할 때값을 전달할 때 양쪽 모두 참조 기호를 사용하여 의미를 전달하고 진정한 인용을 해야 하며, 양쪽에 참조 기호가 없으면 작동하지 않습니다. 잘못된 콘텐츠를 얻었지만 콘텐츠가 참조 대신 값으로 전달되었습니다. 프로그래밍 기초가 없는 사람들은 처음 PHP를 배울 때 값 전달과 참조 전달의 중요성을 이해하기 어렵습니다. 어쨌든 원하는 것을 얻을 수 있다고 생각하지만 많은 경우에는 그렇지 않습니다. , 같은 것을 얻더라도 가격은 완전히 다릅니다. 200만 단어의 값을 값으로 전송하면 400만 단어가 동시에 메모리에 저장되므로 두 배의 비용이 소모됩니다. 참조를 전달하는 것은 이를 전송하는 지름길일 뿐입니다.

위 내용은 PHP에서 함수와 변수 앞에 @ 및 $ 기호를 추가하는 것의 차이점에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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