lonelymyp, Спасибо! Похоже, есть локально эта модель)
А как там реализована поклавишная настройка подсветки, не подскажете? Через софт или хоткеи?
(UPD: нагуглил - таки через софт. Великолепно!)
Добавлю, что не любые, а качественно написанные и соответствующие требованиям биржи. Модерация там достаточно жёсткая ещё несколько лет назад была, как сейчас - не знаю.
Благодарю, но вопрос давно решён - подсветкой, увы, пришлось пожертвовать ради физической клавиатуры. А уж найти современный мощный смартфон с QWERTY и одновременно такой заметной подсветкой - нереально :)
Никита Полевой: В том-то и дело, что в вашем коде - у анонимной функции нет идентификатора, соответственно выражение function($a, $b){...} каждый раз преобразуется в новый объект Closure, ссылка на который в свою очередь уходит в usort. Объект уничтожается сборщиком мусора каждый раз, когда на него не осталось активных ссылок, то есть после каждого выполнения usort.
Вот что происходит у вас:
1) Начало выполнения цикла. PHP находит конструкцию function($a,$b){}, переданную в качестве аргумента и превращает её в объект Closure.
2) PHP выполняет функцию usort, передавая ей в качестве второго аргумента свежесозданный в п.1 объект.
3) Функция usort завершает свою работу. Поскольку она отработала, а ссылка на объект, созданный в п.1, использовалась только в качестве аргумента для этой функции и уже не используется, получается, что больше активных ссылок на объект нет. Объект уничтожается.
4) goto п.1 - начинается новая итерация цикла, всё повторяется снова.
В моём ответе выше я исправил этот нюанс и сразу привязал замыкание к конкретной переменной, в итоге оно инициализируется в объект Closure только 1 раз, а не 100 000.
Никита Полевой: В PHP всё работает аналогичным образом, только ваша функция-замыкание каждый раз при итерации цикла создаётся заново, поскольку не привязана ни к какой переменной.
Логика интерпретатора выглядит примерно так:
вызываем функцию usort, в качестве первого аргумента передаём ей переменную $arr, в качестве второго аргумента - выражение function($a, $b){...}. Выражение каждый раз преобразовывается в объект Closure, чтобы быть переданным в usort, вот и всё.
Никита Полевой: А откуда PHP знает, что у вас в следующей итерации эта функция будет той же самой? Вы не путайте с компилируемыми языками, это там детальный анализ кода проводится. PHP более динамичный и интерпретируется практически на лету.
Вот и у меня такая мысль возникала, но когда попробовал спрашивать об этом хостеров, почти все ушли от ответа, а один признался, что VPSки размещают по формуле "число потоков * 2", и мол всем хватает, никто не жалуется. Поэтому и вопрос тут опубликовал. Хочу найти баланс между добросовестной работой и здравым смыслом, т.к. если я создам по числу ядер, то явно будет простой около 80% мощностей. И в то же время не хочется никого лишать его мощностей. Если человек там захочет грузить своё виртуальный процессор на 100% всё время - это его право.
Приведите, пожалуйста, код шаблона (tpl) и PHP-код, где у вас вызывается шаблон.
И посмотрите в DOM-инспекторе ("Инспектировать" в контекстном меню на первом слове) - может в исходном HTML-коде у вас полностью текст, а оставшиеся слова "съедаются" из-за некорректной вёрстки.
verdex: .tpl-файлы, как правило, принадлежат шаблонизаторам Smarty/Dwoo, которые их читают напрямую из файловой системы и затем компилируют в .php-файлы. При этом включать PHP-код в шаблоны напрямую запрещено (хотя для Smarty был когда-то такой модуль, но его быстро исключили).
Поэтому:
1. ТС не нужно выполнять PHP-код в .tpl файлах, этот вопрос решается иначе.
2. Даже если бы ему это было нужно - .tpl-файлы всё равно не вызываются напрямую через браузер, а используются внутри CMS, поэтому вешать на них обработчик PHP бесполезно.
И к вопросу, почему это опасно - некоторые CMS позволяют редактировать шаблоны в формате .tpl из админки, поэтому если эти файлы будут обрабатываться как PHP-скрипты, то потенциальный взломщик сможет исполнять произвольный код на сервере, лишь получив доступ к админ-панели.
База данных может быть локальной (если вы там не храните никаких секретных данных). Под кордову есть соответствующие модули.
База данных может быть на удалённом сервере. В этом случае ваше приложение не может общаться с ней напрямую, только через API, то есть скрипт-посредник. Он в ответ на запрос со стороны мобильного устройства пользователя будет сам извлекать данные из базы данных, подготавливать их и отдавать клиенту.
Если вам нужно, чтобы база данных была не у пользователя на мобильном устройстве, а на сервере, то сделайте на сервере обёртку для API и вызывайте её из клиента. Например, URL https://example.com/api/get_data отдаёт JSON-данные, которые клиент на кордове разбирает и как-то использует.