dog: у котов внутри есть мурчалка
dog: она реализована для всех котов в классе кот
dog: в объекте кот надо как то вызвать метод мурчало у класса кот
dog: как ты это сделаешь?
dog: кот.мурчало()
dog: ежели ты вызовешь кот.мурчало(), муркнут сразу все коты на свете
dog: а ежели ты вызовешь self.мурчало(), муркнет только тот кот, на которого указывает self
Если существует файл /tmp/ваш_скрипт.lock - завершить работу.
Создать файл /tmp/ваш_скрипт.lock
Выполнить работу.
Удалить файл /tmp/ваш_скрипт.lock
Подвох: если ваш скрипт упал, не дойдя до последнего пункта - больше он не запустится. Так что на п. 1 стоит предусмотреть - "если файл существует и моложе 10 минут", например.
Обычная InnoDB таблица в MySQL:
id не нужен ключ VARCHAR - первичный ключ значение VARCHAR
Вполне рабочая схема и работает хорошо на сотнях миллионов записей.
SELECT значение FROM пары
WHERE ключ=?
SELECT значение FROM пары
WHERE ключ IN (?, ?, ..., ?)
Для экономии обращений к СУБД можно добавить прослойку кэширования Memcached с теми же ключ-значение и ограниченным сроком жизни.
Небольшая несостыковка в объявлении метода, не соответствует(не совместима) с классом родителем, в данном случае количество передаваемых параметров разное. Можно ручками добить третий аргумент в метод start_lvl( &$output, $depth, $args )