Jaime Neto | desenvolvimento para web


O PHP vem evoluindo muito desde sua criação, principalmente nas últimas versões, que vêm incorporando os mais modernos conceitos no que diz respeito ao desenvolvimento de software. Uma das funcionalidades básicas, e que também vem trazendo evoluções, é o operador ternário. Vamos dar uma olhada nas formas que temos de utilizá-lo e entender a diferença entre elas.

Digamos que temos a seguinte comparação:

if ($a) {
    $resultado = 'a';
} else {
    $resultado = 'b';
}

Podemos fazer a mesma coisa, utilizando o operador ternário a seguir:

$resultado = $a ? 'a' : 'b';

Ok. Isso já serve pra economizar algumas linhas de código, e deixá-lo mais objetivo e rápido. Mas, dependendo do caso, pode ainda ser mais encurtado. Digamos que agora eu queira algo como o caso abaixo:

$resultado = $a ? $a : 'b';

Existe, desde o PHP 5.3 uma forma mais curta de fazer essa mesma comparação:

$resultado = $a ?: 'b';

Com isso já conseguimos economizar um pouco mais de código. Mas ainda existe um pequeno problema nessa abordagem: ela só funciona bem, se eu tiver certeza que $a existe, pois o operador não faz esse teste, e se $a não existir, será gerado um mensagem de NOTICE dizendo que a variável não foi declarada. Ele funciona muito bem, por exemplo, dentro de uma função:

function teste($a) {
    return $a ?: 'b';
}

Mas, caso eu precise testar se $a foi declarado, ou seja, se o que eu quero é o equivalente ao código abaixo:

$resultado = isset($a) ? $a : 'b';

Eu ainda posso usar o operador de coalescência nula, ou operador “??”, que foi criado no PHP 7:

$resultado = $a ?? 'b';

Essa é uma forma muito prática, e muito útil, principalmente se você quer utilizar algo que foi passado como parâmetro na requisição, como $_GET ou $_POST, e queria definir um valor padrão, caso o parâmetro não tenha sido passado. Veja o exemplo:

$user = $_GET['user'] ?? 'guest';

Mas então, você pode estar se perguntando pra que ainda existe o operador “?:” se o “??” já resolve, não é? Bem, perceba que, no primeiro exemplo, o “??” não verifica se $a é verdadeiro, ele apenas verifica se ele foi declarado e não é nulo. Veja como o resultado seria diferente nos seguintes casos:

$a = 0;
$resultado = $a ?: 'b';  // retorna 'b'
$resultado = $a ?? 'b';  // retorna 0

Ou seja, “?:” testou se $a é um valor válido e não vazio, enquanto “??” testou apenas se $a foi declarado e não é nulo, independente de seu valor. É preciso tomar muito cuidado com isso, levando em conta o que você queira que seja testado.

Uma outra coisa muito interessante desses operadores “?:” e “??” é a possibilidade de concatenar os testes, simplificando e encurtando ainda mais o código:

$resultado = $a ?? $b ?? $c ?? 'd';

Esse código, se usado com o operador ternário comum, equivaleria a:

$resultado = isset($a) && $a !== null ? $a 
           : (isset($b) && $b !== null ? $b 
           : (isset($c) && $c !== null ? $c : 'd'));

Ou, usando “ifs”:

if (isset($a) && $a !== null) {
    $resultado = $a;
} elseif (isset($b) && $b !== null) {
    $resultado = $b;
} elseif (isset($c) && $c !== null) {
    $resultado = $c;
} else {
    $resultado = 'd';
}

E aí, qual a melhor forma? ^__^

·

jun/17

5

Usando o operador spaceship do PHP7


Pra quem ainda não está familiarizado com esse novo operador do PHP7, o spaceship, eis um resumo de sua funcionalidade: ele serve pra comparar dois valores, e saber se o primeiro operando é menor, igual ou maior que o segundo. Ou seja, ele junta os operadores <, == e > num só, formando <=>. Vejamos como seria fazer essas três comparações sem esse operador:

if ($a < $b) {
    echo 'A é menor que B';
} elseif ($a == $b) {
    echo 'A é igual a B';
} elseif ($a > $b) {
    echo 'A é maior que B';
}

Agora, vejamos usando do operador spaceship:

switch ($a <=> $b) {
    case -1: echo 'A é menor que B'; break;
    case  0: echo 'A é igual a B';   break;
    case  1: echo 'A é maior que B'; break;
}

Ou seja, o operador retorna “menos um” (-1) quando o primeiro operando é menor que o segundo, “zero” (0) quando é igual e “um” (1) quando é maior que o segundo operando. Parece algo muito simples, mas pode nos poupar muitos “ifs”, e linhas extras na codificação, e ajudar a manter o código mais enxuto e legível.

·

maio/17

29

Classe PHP para países


Não raramente precisamos trabalhar com países em nossos sistemas. Então, vou deixar aqui uma classe PHP já pronta pra isso, com suporte a internacionalização, inclusive.
Deixei a classe já com os países em inglês e português, quem precisar pode adicionar outros países, caso necessário.
Também adicionei dois métodos estáticos para buscar o nome pelo código do país, e o contrário também. O motivo de ter criado como métodos estáticos é apenas por questões práticas, pois assim não é necessário instanciar a classe antes de usá-la.

class Countries
{
    private static $countries = [
        'en' => [
            'AF' => 'Afghanistan',
            'ZA' => 'South Africa',
            'AX' => 'Aland Islands',
            'AL' => 'Albania',
            'DE' => 'Germany',
            'AD' => 'Andorra',
            'AO' => 'Angola',
            'AI' => 'Anguilla',
            'AQ' => 'Antarctica',
            'AG' => 'Antigua and Barbuda',
            'AN' => 'Netherlands Antilles',
            'SA' => 'Saudi Arabia',
            'DZ' => 'Algeria',
            'AR' => 'Argentina',
            'AM' => 'Armenia',
            'AW' => 'Aruba',
            'AU' => 'Australia',
            'AT' => 'Austria',
            'AZ' => 'Azerbaijan',
            'BS' => 'Bahamas',
            'BH' => 'Bahrain',
            'BD' => 'Bangladesh',
            'BB' => 'Barbados',
            'BE' => 'Belgium',
            'BZ' => 'Belize',
            'BJ' => 'Benin',
            'BM' => 'Bermuda',
            'BY' => 'Belarus',
            'BO' => 'Bolivia',
            'BA' => 'Bosnia and Herzegovina',
            'BW' => 'Botswana',
            'BV' => 'Bouvet Island',
            'BR' => 'Brazil',
            'BN' => 'Brunei Darussalam',
            'BG' => 'Bulgaria',
            'BF' => 'Burkina Faso',
            'BI' => 'Burundi',
            'BT' => 'Bhutan',
            'CV' => 'Cape Verde',
            'KH' => 'Cambodia',
            'CM' => 'Cameroon',
            'CA' => 'Canada',
            'KY' => 'Cayman Islands',
            'KZ' => 'Kazakhstan',
            'CF' => 'Central African Republic',
            'TD' => 'Chad',
            'CZ' => 'Czech Republic',
            'CL' => 'Chile',
            'CN' => 'China',
            'CY' => 'Cyprus',
            'CX' => 'Christmas Island',
            'CC' => 'Cocos (Keeling) Islands',
            'CO' => 'Colombia',
            'KM' => 'Comoros',
            'CG' => 'Congo',
            'CD' => 'Congo',
            'CK' => 'Cook Islands',
            'KR' => 'South Korea',
            'KP' => 'North Korea',
            'CI' => "Cote d'Ivoire",
            'CR' => 'Costa Rica',
            'HR' => 'Croatia',
            'CU' => 'Cuba',
            'DK' => 'Denmark',
            'DJ' => 'Djibouti',
            'DM' => 'Dominica',
            'DO' => 'Dominican Republic',
            'EG' => 'Egypt',
            'SV' => 'El Salvador',
            'AE' => 'United Arab Emirates',
            'EC' => 'Ecuador',
            'ER' => 'Eritrea',
            'SK' => 'Slovakia',
            'SI' => 'Slovenia',
            'ES' => 'Spain',
            'US' => 'United States',
            'EE' => 'Estonia',
            'ET' => 'Ethiopia',
            'FO' => 'Faroe Islands',
            'FJ' => 'Fiji',
            'PH' => 'Philippines',
            'FI' => 'Finland',
            'FR' => 'France',
            'GA' => 'Gabon',
            'GM' => 'Gambia',
            'GH' => 'Ghana',
            'GE' => 'Georgia',
            'GS' => 'South Georgia and The South Sandwich Islands',
            'GI' => 'Gibraltar',
            'GR' => 'Greece',
            'GD' => 'Grenada',
            'GL' => 'Greenland',
            'GP' => 'Guadeloupe',
            'GU' => 'Guam',
            'GT' => 'Guatemala',
            'GG' => 'Guernsey',
            'GY' => 'Guyana',
            'GF' => 'French Guiana',
            'GW' => 'Guinea-Bissau',
            'GN' => 'Guinea',
            'GQ' => 'Equatorial Guinea',
            'HT' => 'Haiti',
            'HM' => 'Heard Island and McDonald Islands',
            'HN' => 'Honduras',
            'HK' => 'Hong Kong',
            'HU' => 'Hungary',
            'YE' => 'Yemen',
            'IN' => 'India',
            'ID' => 'Indonesia',
            'IQ' => 'Iraq',
            'IR' => 'Iran',
            'IE' => 'Ireland',
            'IS' => 'Iceland',
            'IL' => 'Israel',
            'IT' => 'Italy',
            'JM' => 'Jamaica',
            'JP' => 'Japan',
            'JE' => 'Jersey',
            'JO' => 'Jordan',
            'KI' => 'Kiribati',
            'KW' => 'Kuwait',
            'LA' => "Lao People's Democratic Republic",
            'LS' => 'Lesotho',
            'LV' => 'Latvia',
            'LB' => 'Lebanon',
            'LR' => 'Liberia',
            'LY' => 'Libyan Arab Jamahiriya',
            'LI' => 'Liechtenstein',
            'LT' => 'Lithuania',
            'LU' => 'Luxembourg',
            'MO' => 'Macao',
            'MK' => 'Macedonia',
            'MG' => 'Madagascar',
            'MY' => 'Malaysia',
            'MW' => 'Malawi',
            'MV' => 'Maldives',
            'ML' => 'Mali',
            'MT' => 'Malta',
            'FK' => 'Falkland Islands (Malvinas)',
            'IM' => 'Isle of Man',
            'MP' => 'Northern Mariana Islands',
            'MA' => 'Morocco',
            'MH' => 'Marshall Islands',
            'MQ' => 'Martinique',
            'MU' => 'Mauritius',
            'MR' => 'Mauritania',
            'YT' => 'Mayotte',
            'UM' => 'United States Minor Outlying Islands',
            'MX' => 'Mexico',
            'MM' => 'Myanmar',
            'FM' => 'Micronesia',
            'MZ' => 'Mozambique',
            'MD' => 'Moldova',
            'MC' => 'Monaco',
            'MN' => 'Mongolia',
            'ME' => 'Montenegro',
            'MS' => 'Montserrat',
            'NA' => 'Namibia',
            'NR' => 'Nauru',
            'NP' => 'Nepal',
            'NI' => 'Nicaragua',
            'NE' => 'Niger',
            'NG' => 'Nigeria',
            'NU' => 'Niue',
            'NF' => 'Norfolk Island',
            'NO' => 'Norway',
            'NC' => 'New Caledonia',
            'NZ' => 'New Zealand',
            'OM' => 'Oman',
            'NL' => 'Netherlands',
            'PW' => 'Palau',
            'PS' => 'Palestinian Territory, Occupied',
            'PA' => 'Panama',
            'PG' => 'Papua New Guinea',
            'PK' => 'Pakistan',
            'PY' => 'Paraguay',
            'PE' => 'Peru',
            'PN' => 'Pitcairn',
            'PF' => 'French Polynesia',
            'PL' => 'Poland',
            'PR' => 'Puerto Rico',
            'PT' => 'Portugal',
            'QA' => 'Qatar',
            'KE' => 'Kenya',
            'KG' => 'Kyrgyzstan',
            'GB' => 'United Kingdom',
            'RE' => 'Reunion',
            'RO' => 'Romania',
            'RW' => 'Rwanda',
            'RU' => 'Russian Federation',
            'EH' => 'Western Sahara',
            'AS' => 'American Samoa',
            'WS' => 'Samoa',
            'PM' => 'Saint Pierre and Miquelon',
            'SB' => 'Solomon Islands',
            'KN' => 'Saint Kitts and Nevis',
            'SM' => 'San Marino',
            'ST' => 'Sao Tome and Principe',
            'VC' => 'Saint Vincent and The Grenadines',
            'SH' => 'Saint Helena, Ascension and Tristan Da Cunha',	 
            'LC' => 'Saint Lucia',
            'SN' => 'Senegal',
            'SL' => 'Sierra Leone',
            'RS' => 'Serbia',
            'SC' => 'Seychelles',
            'SG' => 'Singapore',
            'SY' => 'Syrian Arab Republic',
            'SO' => 'Somalia',
            'LK' => 'Sri Lanka',
            'SZ' => 'Swaziland',
            'SD' => 'Sudan',
            'SE' => 'Sweden',
            'CH' => 'Switzerland',
            'SR' => 'Suriname',
            'SJ' => 'Svalbard and Jan Mayen',
            'TH' => 'Thailand',
            'TW' => 'Taiwan',
            'TJ' => 'Tajikistan',
            'TZ' => 'Tanzania',
            'TF' => 'French Southern Territories',
            'IO' => 'British Indian Ocean Territory',
            'TL' => 'Timor-Leste',
            'TG' => 'Togo',
            'TK' => 'Tokelau',
            'TO' => 'Tonga',
            'TT' => 'Trinidad and Tobago',
            'TN' => 'Tunisia',
            'TC' => 'Turks and Caicos Islands',
            'TM' => 'Turkmenistan',
            'TR' => 'Turkey',
            'TV' => 'Tuvalu',
            'UA' => 'Ukraine',
            'UG' => 'Uganda',
            'UY' => 'Uruguay',
            'UZ' => 'Uzbekistan',
            'VU' => 'Vanuatu',
            'VA' => 'Holy See (Vatican City State)',
            'VE' => 'Venezuela',
            'VN' => 'Viet Nam',
            'VI' => 'Virgin Islands, U.S.',
            'VG' => 'Virgin Islands, British',
            'WF' => 'Wallis and Futuna',
            'ZM' => 'Zambia',
            'ZW' => 'Zimbabwe',
        ],
        'pt' => [
            'AF' => 'Afeganistão',
            'ZA' => 'África do Sul',
            'AX' => 'Åland, Ilhas',
            'AL' => 'Albânia',
            'DE' => 'Alemanha',
            'AD' => 'Andorra',
            'AO' => 'Angola',
            'AI' => 'Anguilla',
            'AQ' => 'Antárctida',
            'AG' => 'Antigua e Barbuda',
            'AN' => 'Antilhas Holandesas',
            'SA' => 'Arábia Saudita',
            'DZ' => 'Argélia',
            'AR' => 'Argentina',
            'AM' => 'Arménia',
            'AW' => 'Aruba',
            'AU' => 'Austrália',
            'AT' => 'Áustria',
            'AZ' => 'Azerbeijão',
            'BS' => 'Bahamas',
            'BH' => 'Bahrain',
            'BD' => 'Bangladesh',
            'BB' => 'Barbados',
            'BE' => 'Bélgica',
            'BZ' => 'Belize',
            'BJ' => 'Benin',
            'BM' => 'Bermuda',
            'BY' => 'Bielo-Rússia',
            'BO' => 'Bolívia',
            'BA' => 'Bósnia-Herzegovina',
            'BW' => 'Botswana',
            'BV' => 'Bouvet, Ilha',
            'BR' => 'Brasil',
            'BN' => 'Brunei',
            'BG' => 'Bulgária',
            'BF' => 'Burkina Faso',
            'BI' => 'Burundi',
            'BT' => 'Butão',
            'CV' => 'Cabo Verde',
            'KH' => 'Cambodja',
            'CM' => 'Camarões',
            'CA' => 'Canadá',
            'KY' => 'Cayman, Ilhas',
            'KZ' => 'Cazaquistão',
            'CF' => 'Centro-africana, República',
            'TD' => 'Chade',
            'CZ' => 'Checa, República',
            'CL' => 'Chile',
            'CN' => 'China',
            'CY' => 'Chipre',
            'CX' => 'Christmas, Ilha',
            'CC' => 'Cocos, Ilhas',
            'CO' => 'Colômbia',
            'KM' => 'Comores',
            'CG' => 'Congo, República do',
            'CD' => 'Congo',
            'CK' => 'Cook, Ilhas',
            'KR' => 'Coreia do Sul',
            'KP' => 'Coreia do Norte',
            'CI' => 'Costa do Marfim',
            'CR' => 'Costa Rica',
            'HR' => 'Croácia',
            'CU' => 'Cuba',
            'DK' => 'Dinamarca',
            'DJ' => 'Djibouti',
            'DM' => 'Dominica',
            'DO' => 'Dominicana, República',
            'EG' => 'Egipto',
            'SV' => 'El Salvador',
            'AE' => 'Emiratos Árabes Unidos',
            'EC' => 'Equador',
            'ER' => 'Eritreia',
            'SK' => 'Eslováquia',
            'SI' => 'Eslovénia',
            'ES' => 'Espanha',
            'US' => 'Estados Unidos',
            'EE' => 'Estónia',
            'ET' => 'Etiópia',
            'FO' => 'Faroe, Ilhas',
            'FJ' => 'Fiji',
            'PH' => 'Filipinas',
            'FI' => 'Finlândia',
            'FR' => 'França',
            'GA' => 'Gabão',
            'GM' => 'Gâmbia',
            'GH' => 'Gana',
            'GE' => 'Geórgia',
            'GS' => 'Geórgia do Sul e Sandwich do Sul, Ilhas',
            'GI' => 'Gibraltar',
            'GR' => 'Grécia',
            'GD' => 'Grenada',
            'GL' => 'Gronelândia',
            'GP' => 'Guadeloupe',
            'GU' => 'Guam',
            'GT' => 'Guatemala',
            'GG' => 'Guernsey',
            'GY' => 'Guiana',
            'GF' => 'Guiana Francesa',
            'GW' => 'Guiné-Bissau',
            'GN' => 'Guiné-Conacri',
            'GQ' => 'Guiné Equatorial',
            'HT' => 'Haiti',
            'HM' => 'Heard e Ilhas McDonald, Ilha',
            'HN' => 'Honduras',
            'HK' => 'Hong Kong',
            'HU' => 'Hungria',
            'YE' => 'Iémen',
            'IN' => 'Índia',
            'ID' => 'Indonésia',
            'IQ' => 'Iraque',
            'IR' => 'Irão',
            'IE' => 'Irlanda',
            'IS' => 'Islândia',
            'IL' => 'Israel',
            'IT' => 'Itália',
            'JM' => 'Jamaica',
            'JP' => 'Japão',
            'JE' => 'Jersey',
            'JO' => 'Jordânia',
            'KI' => 'Kiribati',
            'KW' => 'Kuwait',
            'LA' => 'Laos',
            'LS' => 'Lesoto',
            'LV' => 'Letónia',
            'LB' => 'Líbano',
            'LR' => 'Libéria',
            'LY' => 'Líbia',
            'LI' => 'Liechtenstein',
            'LT' => 'Lituânia',
            'LU' => 'Luxemburgo',
            'MO' => 'Macau',
            'MK' => 'Macedónia, República da',
            'MG' => 'Madagáscar',
            'MY' => 'Malásia',
            'MW' => 'Malawi',
            'MV' => 'Maldivas',
            'ML' => 'Mali',
            'MT' => 'Malta',
            'FK' => 'Malvinas, Ilhas (Falkland)',
            'IM' => 'Man, Ilha de',
            'MP' => 'Marianas Setentrionais',
            'MA' => 'Marrocos',
            'MH' => 'Marshall, Ilhas',
            'MQ' => 'Martinica',
            'MU' => 'Maurícia',
            'MR' => 'Mauritânia',
            'YT' => 'Mayotte',
            'UM' => 'Menores Distantes dos Estados Unidos, Ilhas',
            'MX' => 'México',
            'MM' => 'Myanmar (antiga Birmânia)',
            'FM' => 'Micronésia, Estados Federados da',
            'MZ' => 'Moçambique',
            'MD' => 'Moldávia',
            'MC' => 'Mónaco',
            'MN' => 'Mongólia',
            'ME' => 'Montenegro',
            'MS' => 'Montserrat',
            'NA' => 'Namíbia',
            'NR' => 'Nauru',
            'NP' => 'Nepal',
            'NI' => 'Nicarágua',
            'NE' => 'Níger',
            'NG' => 'Nigéria',
            'NU' => 'Niue',
            'NF' => 'Norfolk, Ilha',
            'NO' => 'Noruega',
            'NC' => 'Nova Caledónia',
            'NZ' => 'Nova Zelândia',
            'OM' => 'Oman',
            'NL' => 'Países Baixos (Holanda)',
            'PW' => 'Palau',
            'PS' => 'Palestina',
            'PA' => 'Panamá',
            'PG' => 'Papua-Nova Guiné',
            'PK' => 'Paquistão',
            'PY' => 'Paraguai',
            'PE' => 'Peru',
            'PN' => 'Pitcairn',
            'PF' => 'Polinésia Francesa',
            'PL' => 'Polónia',
            'PR' => 'Porto Rico',
            'PT' => 'Portugal',
            'QA' => 'Qatar',
            'KE' => 'Quénia',
            'KG' => 'Quirguistão',
            'GB' => 'Reino Unido',
            'RE' => 'Reunião',
            'RO' => 'Roménia',
            'RW' => 'Ruanda',
            'RU' => 'Rússia',
            'EH' => 'Saara Ocidental',
            'AS' => 'Samoa Americana',
            'WS' => 'Samoa (Samoa Ocidental)',
            'PM' => 'Saint Pierre et Miquelon',
            'SB' => 'Salomão, Ilhas',
            'KN' => 'São Cristóvão e Névis',
            'SM' => 'San Marino',
            'ST' => 'São Tomé e Príncipe',
            'VC' => 'São Vicente e Granadinas',
            'SH' => 'Santa Helena',	 
            'LC' => 'Santa Lúcia',
            'SN' => 'Senegal',
            'SL' => 'Serra Leoa',
            'RS' => 'Sérvia',
            'SC' => 'Seychelles',
            'SG' => 'Singapura',
            'SY' => 'Síria',
            'SO' => 'Somália',
            'LK' => 'Sri Lanka',
            'SZ' => 'Suazilândia',
            'SD' => 'Sudão',
            'SE' => 'Suécia',
            'CH' => 'Suíça',
            'SR' => 'Suriname',
            'SJ' => 'Svalbard e Jan Mayen',
            'TH' => 'Tailândia',
            'TW' => 'Taiwan',
            'TJ' => 'Tajiquistão',
            'TZ' => 'Tanzânia',
            'TF' => 'Terras Austrais e Antárticas Francesas (TAAF)',
            'IO' => 'Território Britânico do Oceano Índico',
            'TL' => 'Timor-Leste',
            'TG' => 'Togo',
            'TK' => 'Toquelau',
            'TO' => 'Tonga',
            'TT' => 'Trindade e Tobago',
            'TN' => 'Tunísia',
            'TC' => 'Turks e Caicos',
            'TM' => 'Turquemenistão',
            'TR' => 'Turquia',
            'TV' => 'Tuvalu',
            'UA' => 'Ucrânia',
            'UG' => 'Uganda',
            'UY' => 'Uruguai',
            'UZ' => 'Usbequistão',
            'VU' => 'Vanuatu',
            'VA' => 'Vaticano',
            'VE' => 'Venezuela',
            'VN' => 'Vietname',
            'VI' => 'Virgens Americanas, Ilhas',
            'VG' => 'Virgens Britânicas, Ilhas',
            'WF' => 'Wallis e Futuna',
            'ZM' => 'Zâmbia',
            'ZW' => 'Zimbabwe'
        ]
    ];
 
    public static function getName($iso, $lang = 'pt')
    {
        return isset(self::$countries[$lang][$iso]) 
            ? self::$countries[$lang][$iso] 
            : null;
    }
 
    public static function getIso($name, $lang = 'en')
    {
        return array_search($name, self::$countries[$lang]);
    }
 
}

Abaixo, exemplifico o uso dos métodos:

 
Countries::getName('BR', 'pt'); // Retorna 'Brasil'
 
Countries::getIso('Brazil', 'en'); // Retorna 'BR'

No tags

maio/17

22

Coverter URLs em links


Digamos que você tenha um grande texto e quer usá-lo no seu site, e que no meio do texto tem URLs para outros sites. Você quer que o usuário possa clicar neles e serem direcionados para o endereço em questão. Ou seja, transformar as URLs em links.

Eis abaixo a função em PHP para fazer essa conversão:

(mais…)

No tags

maio/17

17

Coverter CamelCase e snake_case


Algumas vezes precisamos converter textos em CamelCase para snake_case, ou o contrário. Por exemplo, digamos que você use o nome dos atributos de uma classe em camelCase e os campos da tabela em camel_case, e em algum momento do seu código você precise converter esses nomes. Então, eis as funções PHP que você precisa para essas conversões:

(mais…)

No tags


Neste sábado (08 de Abril de 2017) aconteceu o 1º Meetup PHP-PB 2017 em João Pessoa/PB. Fui convidado para dar uma palestra sobre Phalcon Framework, e o tema que apresentei foi “Performance de verdade com Phalcon Framework”.

(mais…)

No tags


Você já teve que fazer uma consulta em alguma tabela de um banco de dados MySQL, em que você deseja ordenar por uma coluna específica, e no início dos resultados aparecem todos os campos null dessa coluna? Daí você quer manter a ordem, mas quer que os campos null fiquem no final dos resultados? Como você faz?

Bom, recentemente descobri uma forma bem fácil de fazer isso, e resolvi compartilhar aqui com quem mais precisar.  (mais…)

out/13

26

Usando mp3 como toque do iPhone


Pois é, estou cada vez mais virando um usuário das coisas da Apple. Mas as mesmas críticas que eu tinha da empresa eu mantenho, que não são grandes, mas que vez ou outra são um incomôdo, e que em aparelhos Android não existem. São eles:

  • Bluetooth difente, que só se conecta com outros aparelhos da Apple, e que não serve pra transmissão de arquivos (a menos que você encontre algum aplicativo que faça isso…);
  • Conector diferente, que, apesar de ser muito bom, existem vantagens em usar um padrão que é usado em todos os outros aparelhos;
  • Dependência do iTunes pra copiar arquivos pros dispositivos, que por sinal… ô programinha ruim, viu! Como pode, a Apple, que faz as coisas tão simples fazer algo tão incrivelmente pouco intuitiva e pouco prática?

Bom, mas a qualidade dos aparelhos (hardware) e do sistema operacional e aplicativos ainda fazem valer a pena ter um Apple, sem dúvida.

Uma das coisas que me incomodou bastante foi não poder usar um mp3 como toque do celular de uma forma prática, como eu fazia no meu Xperia. Até que, pesquisando no “Google é meu pastor e nada me faltará”, encontrei uma forma de fazê-lo! Eis os passos: (mais…)

·

jul/13

22

Campus Party Recife 2013


Campus Party

Campus Party

Semana passada fui pela primeira vez a uma Campus Party, ou seja, primeira vez como campuseiro. Foi na segunda Campus Party de Recife, ou #CPRecife2, que ocorreu de 17 a 20 de Julho, e resolvi deixar aqui minhas impressões.

Não é com muita frequência que podemos ver uma quantidade tão grande de nerds (incluindo eu) juntos num só lugar. Tanta gente com seus notebooks, tablets, smartphones, e até mesmo PCs, todos juntos debaixo do teto de uma casa de shows (Chevrolet Hall), assistindo palestras, jogando, acessando a internet ou correndo atrás de brindes. É disso que se trata a Campus Party, de forma resumida.
(mais…)


Neste sábado, 09 de Março de 2013, apresentei uma palestra online via Google Hang Out falando sobre minha experiência ao tirar a certificação Zend Framework.

ProPHP

Para quem tiver interesse, o vídeo pode ser visto logo abaixo, ou na página do PHP-PB (php-pb.net). E disponibilizei os slides da palestra no meu slideshare: http://www.slideshare.net/jaimecpn.
Link direto para esta palestra: http://www.slideshare.net/jaimecpn/certificao-zend-framework.

(mais…)

·

Older posts >>

Theme Design by devolux.nh2.me