isset
абсалютно верно. Но я бы не стал называть это «чтение», т.к. isset
— это специальная конструкция языка. Если вы попытаетесь спросить индекс не-массива, то:unset($a);
echo $a['a']['b']['c']; // будет warning
echo $a['a']; // тоже будет warning
isset($a['a']['b']['c']); // не будет warning'а
<?php
unset($a);
$a['a'] = 'a'; // это ок
$a['b'] = 1; // это ок
$a['a'][0] = 'b'; // перезапишет первый символ строки!!!
$a['b'][0] = 'b'; // будет notice, про обращение к скаляру, как к массиву
unset($a);
$a['a']['b']['c']['d'] = 'str'; // тоже ок
$с = new SomeClass;
$с[0] = 'c'; // Если класс имплементил ArrayAccess интерфейс, то вызовется метод offsetGet,
// иначе Fatal error
instanceof
как временное решение. Т.е. как только нужен completion, я добавляю instanceof. После того как ф-ция дописана, я его убираю. Не самое идеальное решение, но в большинстве случаев хватало. Для репозиториев доктрины делал бы с помощью статического get метода. $PLACEHOLDER
, получается что если после $ идет числовое значение, то это длина значения и мы его читаем с новой строки (то есть как происходит сейчас). Если же после $ идет нечисловая строка, то это плэйсхолдер. В данном случае, это может быть $TIMESTAMP
, который говорит, что аргументом является текущий таймстэмп. Это также позволит добавить еще плэйсхололдеров в будущем (правда не могу придумать каких). Если же нужна большая гибкость, можно заюзать плэйсхолдеры прям в значениях, например что-то вроде %TIMESTAMP%
, но это сделает код обратно не совместимым.