Para nomes de funções não sabia que permitia.. Interessante.. Eu sei que pode usar também em índices de arrays array('漢字'=>null)... Fora do mundo PHP, se PHP é "confuso ou bizarro" por permitir isso, o Oracle também é pois nomes de base de dados, tabelas e colunas aceitam caracteres especiais também. – Daniel Omine 29/10/14 às 4:32
Porque programadores de outros lugares do mundo, como da Arábia Saudita, por exemplo, provavelmente gostariam de poder criar uma função assim:
Você pode convencionar o não uso no seu projeto, por algum motivo específico, e pode ainda configurar um analisador de código fonte para quebrar o build caso encontre caracteres proibidos por convenção. Mas o compilador não conhece alguns aspectos da cultura do seu time ou não está preocupado.
Update: desculpe o uso da palavra "compilador" :-) Algumas linguagens são apenas interpretadas. Mas a resposta é a mesma.
Ora, no meu teclado eu vejo tudo que eu preciso para escrever "executarAção". Então alguma definição de caracter especial está errada (a nossa aqui nesta pergunta ou a do documentador da Microsoft).
São caracteres como pontos, símbolos (@ * ! % ; : . ) ou espaços em branco que não são aceitos pelo sistema de cadastro para preenchimento dos campos nome de usuário e senha.
Aí sim uma boa definição. Ela estabele o domínio para sua definição de caracteres especiais: determinados campos do sistema de cadastro.
Então, concluo que a definição de "caracteres especiais" varia de acordo com o contexto. O que é caracter especial aqui, pode não ser ali.
Nós, programadores de língua portuguesa, consideramos especiais até os caracteres que fazem parte da nossa vida: cedilha e acentuação. Não gostamos deles nos nossos sistemas porque... porque... por que mesmo? Claro, nem precisamos de definição formal, nossa experiência revela que isso só dá problema:
Cada programador salva o arquivo com uma codificação diferente, então o cedilha que você salvou na sua máquina aparece como um símbolo estranho na minha.
Cada aplicativo que usa o nosso banco de dados foi compilado ou será interpretado usando uma codificação diferente, então o SELECT que escrevi num aplicativo usando cedilha não encontrará a tabela criada com cedilha a partir de outro aplicativo.
Cada programador tem uma "noção" diferente de quais palavras são acentuadas, então a função que eu nomeio com um acento não será facilmente encontrada por outro programador que acredita que a palavra não leve acento.
Conclusão: ora, um programador bem-intencionado do PHP deve achar bacana que os de língua portuguesa possam usar sua acentuação, tão comum, no código fonte. Se o interpretador não tem problemas em lidar com estes caracteres, por que limitar seu uso? E, é claro, como já mencionei, há muitos idiomas por aí usando os mais diversos "caracteres especiais".
Os problemas que citei podem ser ignorados por este programador do PHP pois é "fácil" de eliminá-los: basta que todos usem codificação UTF-8 nos seus editores e demais ferramentas, e basta que todos conheçam bem seu idioma. Nós não apostamos nisso (eu pelo menos não aposto) e seguimos nossa tradição de convencionar o não uso de caracteres especiais.
É claro que antes do advento e massificação de padrões de codificação mais modernos (UTF-8), os problemas quanto ao uso de "caracteres especiais" eram sérios pois os padrões de codificações eram limitados. Mesmo naquela época os compiladores e interpretadores não podiam fazer muito no sentido de limitar o uso de caracteres pois, como já dito, a definição de quais caracteres são especiais vai variar.
E o ${0} não deveria gerar um erro ex: { não esperada ou, instrução(if/while/class) esperada antes da { ? – rray♦ 28/10/14 às 21:03
@perdeu Não necessariamente. O PHP já sabe que você está declarando uma variável dado o $, então ele só precisa proibir os caracteres com os quais ele não consegue lidar naquele contexto. Há outras linguagens que não proibem o uso por exemplo de palavras chave em um contexto onde o compilador sabe que não cabe o uso da palavra como palavra chave. – Caffé 28/10/14 às 21:06
Esta não é a resposta que você está procurando? Pesquise outras perguntas com a tag php característica-linguagem ou faça sua própria pergunta.

Toda vez que faço a submissão de algo que não é valido ele cai certinho na validação, mas assim que eu arrumo os dados é como se a validação estivesse persistente no servidor.
Se eu fosse você, usaria um nome diferente de Error para a sua função, já que assim você está sobrescrevendo o Error nativo do JavaScript. Talvez você já saiba disso. Apenas uma observação. :) – Luiz Felipe 2/08/19 às 1:25
:) Acabei esquecendo de falar no outro comentário... Poderia incluir na sua pergunta o código da sua rota no express? Provavelmente o app.post... – Luiz Felipe 2/08/19 às 1:27
O problema surge no fato de você estar utilizando um padrão chamado singleton (saiba mais nesse excelente vídeo do Waldemar Neto). Para entender, vamos rever o código:
Conforme salientado pelo comentário, esse módulo exportará sempre a mesma instância de Error. Isso significa que a classe será instanciada na primeira vez que você importar o módulo e a partir daí, em todas as subsequentes importações o valor exportado será aquela mesma instância.
Nesse contexto, essa abordagem traz diversos problemas, uma vez que você está reutilizando a mesma instância desse mecanismo de validação por toda aplicação. Isso significa que todas as requisições compartilharão essa instância, logo, os erros acumular-se-ão a cada nova validação.
E sempre criar uma nova instância a cada requisição (no seu caso, dentro do método validateCustomer, que é chamado a cada request.
Novamente, recomendo fortemente que você veja o vídeo mencionado anteriormente. Sem ele, não seria capaz, inclusive, de ter elaborado essa resposta. :)
E só para enfatizar: sugiro fortemente que você utilize um nome diferente de Error para a sua classe. Conforme já mencionei nos comentários, ao utilizar o nome Error, você está sobrescrevendo o Error nativo do JavaScript.
Além disso, como você está utilizando uma nova versão do ECMAScript, acho que você deva usar a sintaxe de classes para talvez facilitar:

Tenho alguns dados armazenados no AsyncStorage do dispositivo. O código abaixo me retorna o seguinte resultado:
Para poder montar um objeto apropriado, contendo apenas as informações necessárias do Webservice, estou fazendo o seguinte procedimento:
O que eu quero, é montar um array onde cada índice dele é um objeto contendo esses dados, dos 3 endereços cadastrados.
Para além de que é má ideia correr setState dentro de um loop síncrono, o tipo deve ser Array e não Object. Ou seja esses { ... } deviam ser [...]? – Sergio♦ 24/07/20 às 13:59