2012-12-12 2 views
3

다음 코드에서 경고를받을 수 있습니까?PHP 배열 정의에서 중복 된 키 경고를 표시합니다.

error_reporting(E_ALL); 

    $s = array(
     'a' => '1', 
     'a' => '1' 
    ); 

var_export($s); 
+0

는 내가 키가 이미 사용하는 경우 먼저 확인할 수 있도록 지정하는 모든 데이터를 처리하는 기능을하고있다 배열 값을 업데이트하는 경고를 얻을 수있는 유일한 방법은 생각합니다. – Tom

+1

나는 대답이 * no *라고 생각한다. 최소한 PHP 파서를 사용자 정의하지 않아도됩니다. 미래의 PHP 버전에 대한 새로운'E_STRICT' 체크에 대한 흥미로운 제안 일 수 있습니다. – deceze

답변

1

귀하의 유일한 희망은 편집기가 오타를 강조 똑똑 것입니다. 이 스크린 샷은 PHPStorm에서입니다 :

enter image description here

0

표준 배열을 사용하면이 경우 오류를 실제로 발생시킬 수 없습니다. 그러나 속성을 업데이트/재 선언 할 때 SPL ArrayObject를 확장하여 오류를 throw 할 수 있습니다.

업데이트 : 뭐 그런 : (떨어져 자신을 -ing count에서)

class MyStrictArray extends ArrayObject 
{ 
    public function offsetSet($index, $value) 
    { 
     if ($this->offsetExists($index)) { 
      trigger_error("Can't redeclare a property", E_USER_ERROR); 
      return; 
     } 

     return parent::offsetSet($index, $value); 
    } 
} 

// and to use it. 
$array = new MyStrictArray(); 
$array['a'] = 'foo'; 
$array['a'] = 'bar'; // triggers error 
+0

어떻게'ArrayObject'를 사용하여 작동합니까? – deceze

+2

ArrayObject는 배열 선언 (명백한 오타가있는 곳)과 합법적 인 키 업데이트를 구별 할 수 있습니까? –

+0

@ ÁlvaroG.Vicario 원래의 질문이 오타를 감지하는 경우 ArrayObject가 도움이되지 않습니다. 나중에 코드에서 속성을 다시 선언 할 수없는 데이터 구조가 없다면 유용 할 수 있습니다. –