Есть такой город в Ставропольском крае, Благодарный. Вы будете искать город на ы.
И, наоборот, с Й город начинаться может: Йошкар-Ола
Вам необходимо куда-то сохранять список использованных городов. При том, и программой и игроком. В простом случае массив - штука подходящая. Вам только необходимо обеспечить сохранение данных между вызовами скрипта. Например, писать в сессию.
code.google.com - это такой предшественник github, если не застали его время. Гугл свои исходники обычно подписывает, а тут в исходниках author подписан просто человеком Joe Scylla.
Напомню, что вы спрашиваете про серверный PHP, а не JS и прочий frontend.
Ну и не забывайте, что гугл - это одна из немногих компаний, где машинное время может быть дороже времени разработки. И потому на него ориентироваться не стоит, если не вы огромны примерно на столько же. Фигни там тоже хватает, например недавний перевод статьи о protobuffers.
Возьмите профилировщик и исходники zend engine и посмотрите, сколько времени занимает разбор текста на лексемы относительно всего остального времени.
если вашему проекту заметны +-300 isspace на разборе лексем - то вы уже не используете PHP, равно как и другие динамические языки, а используете что-то компилируемое уровнем ниже.
Нет, это не всё.
Обратите внимание, в метод onAddToCart передаётся уже имеющийся и созданный ранее объект класса CartEntityAddEvent. И там где этот объект был создан - там и передаются параметры в __construct. Возможно скрыто некоторой магией вроде reflection
А если классов имплементирующих интерфейс несколько, то какой объект передается?
Так и смотрите на код, где создаётся экземпляр CartEntityAddEvent.
type hinting всё равно, сколько у вас классов. Главное чтобы передавался параметром класс с нужным интерфейсом. Это обязанность того кода, который вызывает метод. Т.е. там где вызывается new CartEntityAddEvent
В $this->entity = $entity точно объект передается.
Я об этом и сказал.
Вы можете указать в type hinting имя интерфейса - что означает, что вы должны будете передать объект любого класса, который реализовал этот интерфейс.
Посмотрите в объявление любого класса, который можно передать в метод. У него (или его предков) будет указано implements PurchasableEntityInterface.
Нифига не пойму каким образом интерфейс преобразуется в класс
Никак не преобразуется.
Вы в принципе не можете передать именно интерфейс параметром. Передать вы можете объект. Вы можете потребовать, чтобы параметр имел реализацию какого-то интерфейса. Если передаваемый параметром объект реализует нужный интерфейс - у вас уже есть подходящий объект. Если не реализует - у вас будет ошибка.