2017-10-08 2 views
1

ArrayAccess 나의 최후의 프로젝트를위한 인터페이스. 오프셋 매개 변수가 ArrayAccess :: offsetSet()NULL으로 설정된 경우 알 수 없습니다. php.net에 명시된 바와 같이다른 값을 사용할 수없는 경우 오프셋 매개 변수가 NULL로 설정됩니다. PHP에서 무엇을 의미합니까?

참고 : 다음 예제와 같이 다른 값이 이 아닌 경우 offset 매개 변수는 NULL로 설정됩니다.

<?php 
$arrayaccess[] = "first value"; 
$arrayaccess[] = "second value"; 
print_r($arrayaccess); 
?> 

위 예제의 출력 :

Array 
(
    [0] => first value 
    [1] => second value 
) 

그래서 여기 NULL의 개념은 무엇인가? 아무도 말할 수 있습니까?

참조 링크 http://php.net/manual/en/arrayaccess.offsetset.php.

감사합니다.

답변

1

ArrayAccess에 대해 언급했는데, 이것은 인터페이스이며 클래스에 구현 한 경우 클래스를 배열로 사용할 수 있습니다.

당신은 offsetSet 방법에 대한 매뉴얼에서

참고 문장을 복사 : 다른 값은 다음 예에서와 같이 사용할 수없는 경우 오프셋 매개 변수가 NULL로 설정됩니다.

예제가 정말 정확하지 않습니다, 그래서 또 하나 준비 :

http://sandbox.onlinephpfunctions.com/code/baedfadc9bd6bbfbde5ef7152e8c4e7d4a1d99e2

출력은 다음과 같습니다

this is MyTest::offsetSet offset: NULL; value: 'first value' 
this is MyTest::offsetSet offset: NULL; value: 'second value' 

당신은 그 매개 변수를 상쇄 볼 수 있습니다 당신이하지 않으면 NULL입니다 코드에서 설정하십시오. 그러나 다음과 같은 코드를 사용하는 경우 :

귀하의 질문에 응답 : 4,493,210

오프셋 매개 변수는 3

UPDATE 것

번호는 둘 다, 삽입 및 업데이트를 지원합니다. 이 논리는 offsetSet 방법으로 구현해야합니다. 이자형.g :

우리가 배운대로
public function offsetSet($offset, $value) 
{ 
    if (is_null($offset)) { 
     $this->data[] = $value; 
    } else { 
     $this->data[$offset] = $value; 
    } 
} 
+1

예, 코드에서 설정하지 않으면 첫 번째 매개 변수는 null이됩니다. PHP 배열 구문에서 기본적으로 오프셋을 설정하지 않으면 'array_push ($ array, "your value"); ', 당신은 오프셋을 제공하지 않았다. 그래서 NULL이된다. –

+4

그리고 삽입하는 동안 널 (null) 대신 위치에 따라 배열에 오프셋이 할당된다. –

1

ArrayAccess 인터페이스의 offsetSet() 방법은 에 값의 할당을 처리하는 데 필요한 논리를 구현하는 객체의 오프셋 제공 ArrayAccess :

public function offsetSet($offset, $value) 
{ 
    if ($offset === null) { 
     echo "Offset is NULL!"; 
    } else { 
     echo "You assigned '$value' to '$offset'."; 
    } 
} 

ArrayAccess 객체의 오프셋에 값을 할당하는 키를 지정하면 PHP는 offsetSet() :

키를 전달합니다 우리는 키를 제공하지 않으면210
$arrayAccess['name'] = 'Alex'; 
// Outputs: "You assigned 'Alex' to 'name'." 

그러나 PHP는 nulloffsetSet()의 제 파라미터의 값을 설정

$arrayAccess[] = 'Alex'; 
// Outputs: "Offset is NULL!" 

이 구문은 어레이가 푸시 연산 수행 방법과 유사한 오프셋을 지정하는 경우 :

$array = []; 
$array[] = 'Alex'; 

우리가 ArrayAccess 인터페이스의 offsetSet() 메소드를 구현하지 않을 때, 우리는 현재 C 이 동작을 모방하기로 선택하거나 빈 오프셋을 지원하지 않으려는 경우 예외를 throw하는 등의 다른 동작을 수행 할 수 있습니다. 배열의 동작을 복사하려면 ArrayAccess 개체가 반드시 이 필요합니다.이 필요합니다.

+4

오프셋이 할당되지 않으면 offsetSet() 첫 번째 매개 변수 오프셋은 NULL을 받음을 의미합니다. 그러나 배열에 삽입하는 동안 NULL 대신 삽입 위치에 따라 오프셋이 할당됩니까? 하아? –

+1

@MummyDaddy 네, 맞습니다. 'ArrayAccess'는 오프셋이 비어있을 때 객체가'array'처럼 행동하기를 원한다면 선택합니다. 그렇지 않으면 우리는 다른 것을 할 수 있습니다. 업데이트보기! –