PHP에서 "=&" 및 "=" 연산자는 무엇을 의미합니까?
PHP에서 "=&" / "&=" 연산자는 무엇을 의미합니까?그들에 대한 정보는 어디서 읽을 수 있나요?
구글 검색은 도움이 되지 않는다.
$a &= $b
말하다$a = $a & $b
비트 앤 연산자입니다.
$a =& $b
는 $a를 $b에 대한 참조로 할당합니다.
=&
$a =& $b
$a
합니다.$b
의 값 $a
경우,이가 바뀌게 됩니다.$b
그에 따라 변화합니다.
이것은 오브젝트에 관한 "둘 다 같은 장소를 가리키고 있다"와는 다릅니다. 수 있다$c = $d = new AnObject(
두 변수 모두 동일한 위치를 가리킵니다. 그러나 한 점을 변경해도 다른 점이 변경되지 않습니다.그것은,$c = null
수 없다$d = null
의 $a =& $b
, 지,,$a = null
would $b = null
.
주의: 공식적으로 에일리어스는 참조라고 불립니다.공식 용어가 좀 잘못된 용어이고 분명 애매하기 때문에 대신 "에일리어스"라는 용어를 사용하기로 했습니다.메뉴얼에 대해서는, php.net 를 참조해 주세요.
용도 및 효과
값에서는, 「」를 합니다.=&
개체로 값을 감싸는 것과 비슷하므로 여러 변수 간에 값을 전체적으로 변경할 수 있습니다.으로 참조(객체, 「」(객체)는,=&
을 사용하다
저는 자주 쓰는 편이에요.=&
어소시에이티브 어레이로 작업할 때 사용합니다. 쓰는 것이 $foo['bar']['foobar']
수 .$foobar =& $foo['bar']['foobar']
이러한 기능은 지수가 아직 존재하지 않는 경우에도 작동합니다. if$foo['bar']['foobar']
하지 않습니다.그러면, 「존재하지 않습니다」라고 하는 것입니다.isset($foobar)
거짓이 될 것이다.에러를 트리거하지 않고 키의 존재를 테스트하기 전에 에일리어스를 작성할 수 있기 때문에 일반 오래된 변수를 사용하는 것보다 좋습니다.
설정 해제해 ( 「 」 「」unset($foobar)
않으면 나중에 이름을 것이 그렇지 않으면 나중에 변수 이름을 재사용하면 별칭이 가리키는 모든 항목을 덮어쓰게 됩니다.
별칭은 할당에 국한되지 않고 다른 방법으로도 사용할 수 있습니다.다음과 같은 기능을 합니다.
- 루프: " " " "
foreach ($a as &$b)
의$b
는, 대응하는 .$a
(설정되지 않음)$b
안 그러면 이상한 문제에 부딪힐 거야! - function function/parameters "는 다음과 같습니다.
function foobar(&$a)
의$a
의 범위 내에서foobar
는, 가 건네준 를 「변수」로 합니다.$a
. - "/return: "/return: "
function &foobar()
반환되는 것은 모두 발신자가 변경할 수 있습니다.이는 에일리어스를 전달할 때 도움이 됩니다.그것은 또한 남용하기 쉽다. - 어레이:
$a = array(&$b)
에 대한 변경 사항$a[0]
영향을 주다$b
(할당 포함) - call_user_func_array:
call_user_func('foobar', array(&$a))
가정하다foobar
단일 에일리어스 파라미터를 사용합니다.foobar
수정할 수 있게 되었습니다.$a
이를 통해 에일리어스 파라미터를 사용하여 함수/메서드를 호출할 수 있습니다.call_user_func_array
.
예
스칼라
$original = 1;
$copy = $original;
$reference =& $original;
// All three variables == 1.
$reference = 2;
// $original == 2, $reference == 2, $copy == 1
$original = 3;
// $original == 3, $reference == 3, $copy == 1
$copy = 4;
// $original == 3, $reference == 3, $copy == 4
물건들
#!/usr/bin/env php
<?php
class Object
{
private $properties;
public function __construct(array $properties = array())
{
$this->properties = $properties;
}
public function __isset($key)
{
return isset($this->properties[$key]);
}
public function __unset($key)
{
unset($this->properties[$key]);
}
public function __get($key)
{
return isset($this->$key) ? $this->properties[$key] : null;
}
public function __set($key, $value)
{
$this->properties[$key] = $value;
}
public function __toString()
{
return print_r($this->properties, true);
}
}
function print_vars()
{
global $original, $ref, $refref;
echo
'$original: ', $original,
'$ref: ', $ref,
'$refref: ', $refref,
PHP_EOL;
}
$original = new Object(array('a' => 1, 'b' => 2, 'c' => 3));
$ref = $original;
$refref =& $original;
print_vars();
/*
$original: Array
(
[a] => 1
[b] => 2
[c] => 3
)
$ref: Array
(
[a] => 1
[b] => 2
[c] => 3
)
$refref: Array
(
[a] => 1
[b] => 2
[c] => 3
)
*/
$original->a = 'duck';
$ref->b = 'moose';
$refref->c = 'cow';
print_vars();
/*
$original: Array
(
[a] => duck
[b] => moose
[c] => cow
)
$ref: Array
(
[a] => duck
[b] => moose
[c] => cow
)
$refref: Array
(
[a] => duck
[b] => moose
[c] => cow
)
*/
// This carries over to $refref, but not $ref.
$original = new Object(array('x' => 1, 'y' => 2, 'z' => 3));
print_vars();
/*
$original: Array
(
[x] => 1
[y] => 2
[z] => 3
)
$ref: Array
(
[a] => duck
[b] => moose
[c] => cow
)
$refref: Array
(
[x] => 1
[y] => 2
[z] => 3
)
*/
// This does *not* carry over to $original or $ref.
$ref = new Object(array('o' => 42, 'm' => 123, 'n' => 1337));
print_vars();
/*
$original: Array
(
[x] => 1
[y] => 2
[z] => 3
)
$ref: Array
(
[o] => 42
[m] => 123
[n] => 1337
)
$refref: Array
(
[x] => 1
[y] => 2
[z] => 3
)
*/
// This *does* carry over to $original, but not $ref.
$refref = new Object(array('alpha' => 10, 'beta' => 20, 'gamma' => 30));
print_vars();
/*
$original: Array
(
[alpha] => 10
[beta] => 20
[gamma] => 30
)
$ref: Array
(
[o] => 42
[m] => 123
[n] => 1337
)
$refref: Array
(
[alpha] => 10
[beta] => 20
[gamma] => 30
)
*/
?>
&=
&=
와는 무관하다=&
일련의 할당 작업으로부터 얻을 수 있습니다.다음은 몇 가지 예입니다.
+=
-=
*=
/=
트렌드가 보이시나요?
이진 산술 연산자에는 일반적으로 할당 연산자가 있습니다.예를 들어@
산술 연산자(글쓰기와는 다르다)였다.$a @ $b
일반적으로는 일 때 수치를 산출한다.$a
그리고.$b
(생각: 덧셈, 곱셈, 나눗셈 등)이런 일을 얼마나 자주 해야 하나요?
$a = $a @ $b;
꽤 자주.반복할 필요가 없어 보이지 않나요?$a
PHP를 포함한 많은 언어들이 할당 연산자의 배열로 이 문제를 해결합니다.
$a @= $b;
훨씬 단순하고 이 표기법에 익숙한 프로그래머에게는 한 눈에 보다 간결하고 설명적인 표현일 수 있습니다.(익숙하니까 확실히 읽기 쉬워요.)변수를 이중으로 만들려면:
$a *= 2;
빠르고, 쉽고, 비교적 알기 쉬운 기술입니다.PHP를 포함한 일부 언어에서는 추가 연산을 위해 이 기능을 산술 이상으로 확장합니다.특히:
$a = $a . 'Appended text';
// Is the same as:
$a .= 'Appended text';
매우 편리합니다.
&=
이러한 할당 연산자에 속합니다.이유는 다음과 같습니다.&
는 비트 연산 AND 연산을 나타냅니다.PHP 문서에는 다른 몇 가지 목록이 있습니다(상기 링크 참조). 이 모든 것은 많은 프로그래밍 언어에서 공통적입니다.
즉,$a &= $b
와 같다$a = $a & $b
.
언급URL : https://stackoverflow.com/questions/1367454/what-do-the-and-operators-in-php-mean
'programing' 카테고리의 다른 글
MySQL 쿼리에서 DISTINT 및 COUNT 함께 사용 (0) | 2022.09.26 |
---|---|
jQuery에서 어레이를 루프하는 방법 (0) | 2022.09.26 |
Base64 데이터 URI에서 PNG 이미지 서버 측을 저장하는 방법 (0) | 2022.09.25 |
MariaDB/MySQL: "UTC" 시간대가 "+00:00" 시간대와 같습니까? (0) | 2022.09.25 |
타이프스크립트:유형 '{A": 문자열;}에서 매개 변수 유형이 'string'인 인덱스 서명을 찾을 수 없습니다. (0) | 2022.09.25 |