Introdução ao CodeIgniter parte II – primeiros passos – PHP

Posted by Reimberg | Posted in CodeIgniter, PHP | Posted on 23-03-2009-05-2008

0

Fala galera.

No primeiro post sobre o codeigniter falamos um pouco da evolução do php e também sobre suas facilidades de codificação.

Agora vamos seguir falando da configuração básica para acesso à banco e exibição de dados na plataforma MVC.

Model View Controller (ou simplesmente MVC) é uma metodologia de desenvolvimento que visa separar o código em camadas, de modo a facilitar o desenvolvimento paralelo. Numa arquitetura MVC constuma-se separar as camadas de Visualização (layout gráfico), Controle (regras de negócio) e Modelo (acesso direto à dados), de modo que se torna mais difícil acontecer de o designer “bagunçar” o trabalho do programador e vice-e-versa.

Muito bem, após esta pequena explanação sobre MVC vamos ao assunto principal.
Na estrutura de diretórios do CodeIgniter você encontrará o local dos arquivos de configuração.

Diretório: /system/application/config/

Edite o arquivo config.php:

<?php
    $config["base_url"] = "http://www.meusite.com.br/";
?>

O exemplo acima indica que a URL base do Code Igniter será http://www.meusite.com.br/, nesse Code Igniter está instalado no diretorio / do seu servidor.

No arquivo database.php são setadas as configurações de acesso à banco, como host, usuário, senha e tipo de SGBD:

<?php
     $db["default"]["hostname"] = "localhost";
     $db["default"]["username"] = "root";
     $db["default"]["password"] = "";
     $db["default"]["database"] = "db";
     $db["default"]["dbdriver"] = "mysql";
?>

O arquivo autoload.php indica quais bibliotecas devem ser carregadas automaticamente na execução do programa, no caso abaixo estamos definindo apenas a biblioteca de banco de dados:

<?php
     $autoload["libraries"] = array("database");
?>

Exemplo de utilização da biblioteca database:

<?php
     $this->db->get("tabela");
?>

Exemplo de codificação de um “Hello World” com acesso a banco de dados

Arquivo hello_controller.php:

<?php
     class Hello extends Controller
     {
          function Hello()
          {
               parent::Controller();
          }

          function index($id)
          {
               $query = $this->db->get_where('tabela', array("id" => $id), 1);

               $data["titulo"] = "Titulo da pagina";
               $row = $query->row();
               $data["texto"] =  $row->nome;

               $this->load->view("hello_view",$data);
          }
     }
?>

Arquivo hello_view.php:

<html>
     <head>
          <title><?= $titulo?></title>
     </head>
     <body>
          <p><?= $texto?></p>
     </body>
</html>

Para chamar o programa abra seu browser e digite o endereço de seu site seguido do nome do controle/método/parâmetro

http://www.meusite.com.br/index.php/hello/index/1

.NET C# 3.5 – Features – Parte II

Posted by Vinicius Quaiato | Posted in .NET, C# | Posted on 20-03-2009-05-2008

0

Continuando nosso artigo sobre as features do c# 3.0 e .NET 3.5.

Parte I:
http://blog.relaxos.com.br/geral/net-csharp-35-features-parte-i/

Vamos continuar falando sobre Colletion Initializers.

Colletion Initializers: São parecidos com Object Initializers, porém para coleções. Esta feature permite a você definir elementos para a coleção no memento da criação, desde que a mesma implemente IEnumerable.

Vamos ver o primeiro caso, uma lista de strings:

List<string> strings = new List<string>{ "Eu" , "Programando" , ".NET C# 3.5" };

Poderíamos também ter uma lista com uma classe que criamos, e utilizar Collection e Object Initializers juntos:

public class Pessoa
{
    public string Nome{get; set;}
    public string Sobrenome{get; set;}
}

List<Pessoa> pessoas = new List<Pessoa>{
    new Pessoa(){Nome = "Vinicius",Sobrenome = "Quaiato"},
    new Pessoa(){Nome = "Programando",Sobrenome = ".NET 3.5 C#"}
};

 

Implicitly Typed Local Variables: O .NET 3.0 possui uma keyword chamada var. Ela é diferente das antigas variáveis var do VB6. Elas são locais e fortemente tipadas, apesar de ter tipo implícito.

Por ser fortemente tipada, uma var que contenha um inteiro, é do tipo inteiro, implicitamente, e não pode receber outro tipo.
Confuso? Bom, vamos aos exemplos que são mais fáceis de entender:

var inteiro = 10;
int outroInteiro = inteiro;

Isso é possível pois o compilador entende à partir do momento que a variável inteiro recebe um valor int, ela assume o tipo int, e não se pode mais modificar isso.
E para provar, vamos pegar o Type da nossa var inteiro, e do nosso int outroInteiro:

var inteiro = 10;
int outroInteiro = inteiro;

Console.WriteLine("Type of inteiro: {0}\nType of outroInteiro: {1}", inteiro.GetType().Name, outroInteiro.GetType().Name);

Teremos a seguinte saída no console:
var1

E esta verificação é feita em tempo de compilação, ou seja, escrever o seguinte código não compilaria nosso programa:

var inteiro = 10;
inteiro = "vinicius";

 

Anonymous Types: Tipos anônimos são tipos locais, têm seus nomes definidos em runtime e os tipos de suas propriedades inferidos implicitamente (assim como nos tipos var)

São uma maneira interessante de encapsular informações no escopo de um método.
Vamos entender sob a perspectiva da seguinte situação:

Temos um método onde dentro dele precisamos trabalhar com o Nome de um Cliente, o Valor total de um Pedido, uma data de Entrega e um Código de produto.

Se não quiséssemos manter todos esses objetos carregados em memória, imaginando que eles são muito custosos, poderíamos ter um tipo anônimo para guardas estas informações que de fato vamos trabalhar, exemplo:

var anonymousType = new {
                            Nome = "Vinicius Quaiato",
                            Valor = 10.75,
                            Data = DateTime.Now.AddDays(3),
                            Produto = new Guid()
                        };

Ou seja, acabamos de criar um tipo novo, que não sabemos o nome, mas definimos propriedades para ele. E logo após fazer isso, o intellisense está disponível com essas properties. vejamos:
anonymous

E para comprovar que de fato criamos um novo objeto de um novo tipo, vamos executar o seguinte código:

var anonymousType = new {
                            Nome = "Vinicius Quaiato",
                            Valor = 10.75,
                            Data = DateTime.Now.AddDays(3),
                            Produto = new Guid()
                        };

Console.WriteLine("\nType Name:\n{0}", anonymousType.GetType().Name);

Console.WriteLine("\n\nProperties of anonymousType object:\n {0}", anonymousType);

E teremos a saída:
anonymous2

Bom, é isso pessoal. Estas features do C# 3.0 e .NET 3.5 são incríveis, agora é usar a imgainação e aproveirar.

Continuaremos a terceira e última parte deste artigo falando sobre:

  • Extension methods – Métodos de extensão
  • Lambda expressions – Expressões Lambda
  • Query expressions – LINQ
    • Obrigado pelas visitas, comentem e voltem sempre!

      Vinicius Quaiato

.NET C# 3.5 – Features – Parte I

Posted by Vinicius Quaiato | Posted in .NET, C# | Posted on 19-03-2009-05-2008

0

Fala Galera marvada, belezinha?
Espero que estejam gostando do blog, os posts, os conteúdos. Sintam-se à vontade para comentar e participar.

Bom decidi falar um pouco sobre algumas features do .NET C# 3.5
Na verdade estas features são do Visual C# 3.0, mas creio que se tornaram bem populares com o lançamento da versão 3.5 do .NET Framework.
Nesta versão do C# foram introduzidas algumas coisas muito intressantes:

  • Object and collection initializers – Inicializador de objetos e coleções
  • Automatic Properties – Proprieddes automáticas
  • Implicitly typed local variables – Tipo implícito de variáveis locais
  • Anonymous types – Tipos anônimos
  • Extension methods – Métodos de extensão
  • Lambda expressions – Expressões Lambda
  • Query expressions – LINQ

Automatic Properties: Permite a criação de propriedades(atributos de classe) sem a necessidade de variáveis de controle para os getters e setters

O que antes era feito assim:

class Pessoa_Antes
{
    private string nome;
    public string Nome
    {
        get { return this.nome; }
        set { this.nome = value; }
    }
}

Agora fazemos assim:

class Pessoa_Nova
{
    public string Nome { get; set; }
}

E podemos modificar a visibilidade do getter ou do setter, por exemplo:

class Pessoa_Nova
{
    public string Nome { protected get; private set; }
}

 

Object Initializers: Permite algo parecido com o uso do with em VB. Você pode inicializar um objeto já setando suas properties.

Vamos imaginar a seguinte classe:

class Pessoa
{
    public string Nome { get; set; }
    public string Sobrenome { get; set; }
}

Antes precisávamos ter um construtor com todas as propriedades da classe que quiséssemos inicializar com valores, exemplo:

public Pessoa(string nome, string sobrenome)
{
    this.Nome = nome;
    this.Sobrenome = sobrenome;
}
public Pessoa(string nome)
{
    this.Nome = nome;
}

E inicializaríamos um objeto assim:

Pessoa novaPessoa = new Pessoa("Vinicius","Quaiato");
Pessoa outraPessoa = new Pessoa("Fulano");

Isso nos obrigava a ter vários tipos de construtores, pois quanto mais atributos a classe possuía, mais formas de instanciá-la tínhamos.

Agora podemos fazer assim para instanciar a mesma classe:

Pessoa vinicius = new Pessoa(){ Nome = "Vinicius", Sobrenome = "Quaiato" };
Pessoa fulano = new Pessoa(){ Nome = "Fulano" };
Pessoa daSilva = new Pessoa(){ Sobrenome = "Da Silva" };

Percebem que os construtores chamados foram sempre o construtor default, parameterless?
Agora podemos com apenas o construtor default, inicializar quaisquer propriedades dentro da classe.

Na próxima parte do artigo teremos:

  • Implicitly Typed Local Variables
  • Collection Initializers
  • Anonymous Types

Abraços, e até a próxima.
Comentem!!!

Vinicius Quaiato.