다음 코드에서 경고를받을 수 있습니까?PHP 배열 정의에서 중복 된 키 경고를 표시합니다.
error_reporting(E_ALL);
$s = array(
'a' => '1',
'a' => '1'
);
var_export($s);
다음 코드에서 경고를받을 수 있습니까?PHP 배열 정의에서 중복 된 키 경고를 표시합니다.
error_reporting(E_ALL);
$s = array(
'a' => '1',
'a' => '1'
);
var_export($s);
귀하의 유일한 희망은 편집기가 오타를 강조 똑똑 것입니다. 이 스크린 샷은 PHPStorm에서입니다 :
표준 배열을 사용하면이 경우 오류를 실제로 발생시킬 수 없습니다. 그러나 속성을 업데이트/재 선언 할 때 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
어떻게'ArrayObject'를 사용하여 작동합니까? – deceze
ArrayObject는 배열 선언 (명백한 오타가있는 곳)과 합법적 인 키 업데이트를 구별 할 수 있습니까? –
@ ÁlvaroG.Vicario 원래의 질문이 오타를 감지하는 경우 ArrayObject가 도움이되지 않습니다. 나중에 코드에서 속성을 다시 선언 할 수없는 데이터 구조가 없다면 유용 할 수 있습니다. –
는 내가 키가 이미 사용하는 경우 먼저 확인할 수 있도록 지정하는 모든 데이터를 처리하는 기능을하고있다 배열 값을 업데이트하는 경고를 얻을 수있는 유일한 방법은 생각합니다. – Tom
나는 대답이 * no *라고 생각한다. 최소한 PHP 파서를 사용자 정의하지 않아도됩니다. 미래의 PHP 버전에 대한 새로운'E_STRICT' 체크에 대한 흥미로운 제안 일 수 있습니다. – deceze