Отображение разных пальцев для разных действий с помощью Apple TouchID [дубликат]

Хотя переменные, определенные внутри области функции, не могут быть доступны извне, это не означает, что вы не можете использовать их значения после завершения этой функции. PHP имеет хорошо известное ключевое слово static, которое широко используется в объектно-ориентированном PHP для определения статических методов и свойств, но следует иметь в виду, что static также может использоваться внутри функций для определения статических переменных.

Что это за «статическая переменная»?

Статическая переменная отличается от обычной переменной, определенной в области функции, в случае, если она не потеряет значение, когда выполнение программы выходит из этой области. Давайте рассмотрим следующий пример использования статических переменных:

function countSheep($num) {
 static $counter = 0;
 $counter += $num;
 echo "$counter sheep jumped over fence";
}

countSheep(1);
countSheep(2);
countSheep(3);

Результат:

1 sheep jumped over fence
3 sheep jumped over fence
6 sheep jumped over fence

Если бы мы определили $counter без static, то каждый раз эхо-значение будет будет таким же, как параметр $num, переданный функции. Использование static позволяет построить этот простой счетчик без дополнительного обхода.

Использование прецедентов статических переменных

  1. Чтобы сохранить значения между последовательными вызовами функции.
  2. Сохранять значения между рекурсивными вызовами, когда нет пути (или нет цели) для передачи их в качестве параметров.
  3. К кеш-значению, которое обычно лучше извлекать один раз. Например, результат чтения неизменяемого файла на сервере.

Трюки

Статическая переменная существует только в области локальной функции. Он не может быть доступен за пределами функции, в которой он был определен. Таким образом, вы можете быть уверены, что он сохранит свое значение без изменений до следующего вызова этой функции.

Статическая переменная может быть определена только как скалярным или скалярным выражением (с PHP 5.6). Присвоение других ценностей неизбежно приводит к отказу, по крайней мере, на момент написания этой статьи. Тем не менее вы можете сделать это только на следующей строке вашего кода:

function countSheep($num) {
  static $counter = 0;
  $counter += sqrt($num);//imagine we need to take root of our sheep each time
  echo "$counter sheep jumped over fence";
}

Результат:

2 sheep jumped over fence
5 sheep jumped over fence
9 sheep jumped over fence

Статическая функция «разделена» между методами объектов тот же класс. Это легко понять, просмотрев следующий пример:

class SomeClass {
  public function foo() {
    static $x = 0;
    echo ++$x;
  }
}

$object1 = new SomeClass;
$object2 = new SomeClass;

$object1->foo(); // 1
$object2->foo(); // 2 oops, $object2 uses the same static $x as $object1
$object1->foo(); // 3 now $object1 increments $x
$object2->foo(); // 4 and now his twin brother

Это работает только с объектами того же класса.

Является ли статическая переменная единственным способом сохранить значения между вызовами функции?

Другим способом сохранения значений между вызовами функций является использование замыканий. Закрытие было введено в PHP 5.3. В двух словах они позволяют ограничить доступ к некоторому набору переменных внутри области функций другой анонимной функцией, которая будет единственным способом доступа к ним. Быть в закрывающих переменных могут имитировать (более или менее успешно) концепции ООП, такие как «константы класса» (если они были переданы в закрытии по значению) или «частные свойства» (если они переданы по ссылке) в структурированном программировании.

Последний фактически позволяет использовать замыкания вместо статических переменных. Что нужно использовать, разработчик всегда должен решить, но следует упомянуть, что статические переменные, безусловно, полезны при работе с рекурсиями и заслуживают того, чтобы их заметили разработчики.

0
задан alital 11 February 2015 в 23:47
поделиться

2 ответа

Кажется, что вы предполагаете, что пальцы названы, вы не можете получить имя пальца, но даже если бы вы могли, какое использование это, когда пользователь должен переименовать каждый палец в то, что имеет для них смысл?

Я видел, как люди называют средний палец «f *** you finger», а большой палец - «гитарным строком». На тестовом устройстве мой индекс называется «Даниэль Индекс», а другой - «Индекс Джулиано».

Аппаратное обеспечение не знает, является ли палец большим или индексом. Итак, возможно, вы слишком много думали с Touch ID, чтобы начать.

1
ответ дан Daniel 21 August 2018 в 06:36
поделиться
  • 1
    предположим, что вы хотите внедрить систему, в которой устройство может использоваться между несколькими людьми (я знаю, что это не так), поэтому вы хотите узнать, кто является лицом (пальцем), прошедшим проверку подлинности. Я знаю, что есть «Touchy». приложение, которое запускает приложение на основе каждого пальца. просто google it – alital 12 February 2015 в 05:08
  • 2
    Touchy - приложение для взлома. Но он задает вопрос, как он это делает? Я бы сказал, что есть частная структура данных с этими именами. – Paul Cezanne 19 February 2015 в 22:23

Это недоступная функция (публично или конфиденциально).

Яблоко очень безопасно в этой области - в настройках, это за кодом доступа.

3
ответ дан tizaks 21 August 2018 в 06:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: