on Oct 7th, 2008Magiska metoder

I PHP 5 finns det ett antal magiska metoder, vilka du bara drar nytta utifall du programmerar objektorienterat.D

De nya metoderna är:

  • __construct
  • __destruct
  • __autoload
  • __call
  • __callStatic
  • __get
  • __set
  • __isset
  • __unset
  • __sleep
  • __wakeup
  • __toString
  • __set_state
  • __clone

I detta inlägg kommer jag dock bara ta upp de vanligaste, nämligen __construct, __get, __set, __autoload samt __toString.

__construct…

…är konstruktorn för ett objekt och anropas varje gång en klass instansieras. Ett exempel är:

Class HelloWorld
{
    public function __construct($name)
    {
        echo ‘Hello world, ‘ . $name . ‘!’;
    }
}

$world = new HelloWorld(‘Alexander’);

 

Vilket kommer att skriva ut “Hello world, Alexander!”.

I konstruktorn skall alla privata variabler instansieras, dock är det även användbart att göra till exempel anslutningar mot databaser m.m.

__get & __set

Dessa två magiska funktioner används när man till exempel vill skapa eller komma åt en variabel som inte existerar, eller är skapad dynamiskt. Ett exempel är:

Class HelloWorld
{
    public function __get($key)
    {
        return $this->$key;
    }

    public function __set($key, $value)
    {
        $this->$key = $value;
    }
}

 

Skulle vi sedan utföra något liknande:

$world = new HelloWorld;

$world->name = "Alexander"; // __set

echo $world->name;           // __get

 

Skulle vi helt enkelt skriva ut Alexander. Notera att det inte finns någon privat variabel som håller mitt namn, utan den skapas dynamiskt via vår __set-method, och hämtas sedan vårt __get-anrop.

__autoload…

… är en funktion jag använder i vartenda projekt jag bygger. Med auto loading kan vi tillämpa lazy loading, vilket innebär att man inte hämtar någonting förrens man behöver det. Det betyder att vi inte behöver några rader som require_once ‘helloworld.class.php’, utan allting sköts automatiskt

Exempel:

function __autoload($class)
{
      require_once $class . ‘.php’;
}

$class = new HelloWorld;
 

När vi anropar $class = new HelloWorld, kommer PHP märka att vi inte har laddat klassen, och istället för att kasta en E_WARNING eller E_NOTICE, kommer klassnamnet skickas till vår __autoload(), som sedan inkluderar rätt fil. Detta är väldigt användbart då man kan spara stora resurser på det.

__toString

Denna magiska method berättar helt enkelt för PHP hur klassen skall omvandlas till en sträng. När vi kör till exempel echo $class, får vi object of class Class could not be converted to string. Skulle vi däremot definiera  en __toString skulle PHP skriva ut det vi specifierar i vår magiska method.

Exempel:

<?php

Class HelloWorld
{
     private $name;

     public function __construct($name)
     {
            $this->name = $name;
     }

     public function __toString()
     {
          return ‘Hello world, ‘ . $this->name . ‘!’;
      }
}

?>
 

Kör vi:

$class = new HelloWorld("Alexander);

echo $class;

kommer således “Hello world, Alexander!”

Rekommenderas:
Netatonce - Fordonsdekor - Vaccination influensa

2 kommentarer till “Magiska metoder”

  1. Werewolfon 13 Oct 2008 at 13:30:13

    Positive emotions – are the emotions that arise, if at all put.

  2. Azrealon 21 Oct 2008 at 08:21:14

    En bra artikel och mycket mycket lätt att förstå med dina simpla exempel.
    Vill jag se era utav.
    Mvh Mattias

RSS

Lämna en kommentar